我想知道我在这里做错了什么来验证用户身份。我有一个应用程序,用户通过几个步骤来激活他们的帐户,并且在这样做时我想绕过登录表单并将他们直接带到他们的仪表板。
这是我的自动登录功能的样子:
protected void automatedLogin(String username, String password, HttpServletRequest request) {
try {
// Must be called from request filtered by Spring Security, otherwise SecurityContextHolder is not updated
CustomUserDetailsService udService = new CustomUserDetailsService(userDAO, request);
UserDetails uDetails = udService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(uDetails, password);
token.setDetails(new WebAuthenticationDetails(request));
DaoAuthenticationProvider authenticator = new DaoAuthenticationProvider();
Authentication authentication = authenticator.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
} catch (Exception e) {
e.printStackTrace();
SecurityContextHolder.getContext().setAuthentication(null);
}
}
我必须使用 DaoAuthenticationProvider 类作为我的身份验证提供程序。我已经验证我得到了一个包含正确凭据、ID、权限角色等的 UserDetails 模型。
当它调用身份验证方法时,我在 DaoAuthenticationProvider 类中的某个地方遇到了一个空指针:
org.springframework.security.authentication.AuthenticationServiceException 在 org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:109) 在 org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:132 ) 在 com.bosch.actions.BaseController.doAutoLogin(BaseController.java:659) 。. . 引起:org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:101) 处的 java.lang.NullPointerException
我真的不确定什么是 null,因为我没有可用的源代码。
我可以通过在对象上显式设置 UserDetailsService 来绕过 Null 指针:
authenticator.setUserDetailsService(udService);
但是现在当我知道提供的密码正确时,我得到了错误的凭据异常,因为我已经在代码前面设置的 UserDetails 对象的调试器中看到了它。
org.springframework.security.authentication.BadCredentialsException:在 org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.爪哇:149)