{"record":{"id":"5ab44e09375e8752","repo":"pinpoint-apm/pinpoint","slug":"user-not-found","errorCode":null,"errorMessage":"User not found: ","messagePattern":"User not found: ","errorType":"exception","errorClass":"UsernameNotFoundException","httpStatus":null,"severity":"error","filePath":"basic-login/src/main/java/com/navercorp/pinpoint/login/basic/service/PinpointMemoryUserDetailsService.java","lineNumber":75,"sourceCode":"\n        List<UserDetails> adminList = basicLoginConfig.getAdminList();\n        for (UserDetails admin : adminList) {\n            userDetailsMap.put(admin.getUsername(), admin);\n        }\n\n        if (logger.isDebugEnabled()) {\n            Collection<String> adminRoleUserNameList = adminList.stream().map(UserDetails::getUsername).collect(Collectors.toList());\n            logger.debug(\"Has been registered {} that has ADMIN role.\", adminRoleUserNameList);\n        }\n\n        this.userDetailsMap = Map.copyOf(userDetailsMap);\n    }\n\n    @Override\n    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {\n        UserDetails userDetails = userDetailsMap.get(username);\n        if (userDetails == null) {\n            throw new UsernameNotFoundException(\"User not found: \" + username);\n        }\n\n        return new User(\n                userDetails.getUsername(),\n                userDetails.getPassword(),\n                userDetails.isEnabled(),\n                userDetails.isAccountNonExpired(),\n                userDetails.isCredentialsNonExpired(),\n                userDetails.isAccountNonLocked(),\n                userDetails.getAuthorities()\n        );\n    }\n\n}\n","sourceCodeStart":57,"sourceCodeEnd":90,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/basic-login/src/main/java/com/navercorp/pinpoint/login/basic/service/PinpointMemoryUserDetailsService.java#L57-L90","documentation":"PinpointMemoryUserDetailsService.loadUserByUsername looks up users in an in-memory map and throws Spring Security's UsernameNotFoundException ('User not found: <username>') when absent. This is the standard Spring Security contract for unknown users.","triggerScenarios":"Any authentication or cookie-creation flow calling loadUserByUsername with a username not present in userDetailsMap.","commonSituations":"Typo in username at login; in-memory user repository not loaded (missing/empty user file); user deleted while a valid JWT cookie still references them.","solutions":["Register the user through Pinpoint user management so it lands in the in-memory map","Check the user list configuration/resource is loaded at startup (non-empty userDetailsMap)","Treat UsernameNotFoundException as 'bad credentials' in the auth flow and prompt re-login"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"boolean exists = userService.isUserExist(userId);\nif (!exists) { throw new UsernameNotFoundException(userId); }","typeGuard":null,"tryCatchPattern":"try { UserDetails d = svc.loadUserByUsername(username); } catch (UsernameNotFoundException e) { throw new BadCredentialsException(\"bad credentials\"); }","preventionTips":["Catch UsernameNotFoundException and map to bad-credentials, never leak usernames","Verify the user list resource loads non-empty at startup","Re-register users after data resets or migrations"],"tags":["java","spring-security","user"],"backgroundTag":"user-not-found","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}