Spring security 未在HttpSession中持久化Spring安全自动登录

Spring security 未在HttpSession中持久化Spring安全自动登录,spring-security,Spring Security,下面的代码创建了一个Spring身份验证对象,该对象的角色_user与我查看SecurityContext context=SecurityContextHolder.getContext()时的角色关联;最后,它确实有一个角色_USER和一个UserDetails主体,因此不知何故,它没有与我的HttpSession关联。有什么想法吗?我的例外情况也在下面 public String login(){ if(signUpDetailBean.getEmail() != null){

下面的代码创建了一个Spring身份验证对象,该对象的角色_user与我查看SecurityContext context=SecurityContextHolder.getContext()时的角色关联;最后,它确实有一个角色_USER和一个UserDetails主体,因此不知何故,它没有与我的HttpSession关联。有什么想法吗?我的例外情况也在下面

public String login(){

    if(signUpDetailBean.getEmail() != null){

        sers currentUser = userManager.getUser(signUpDetailBean.getEmail());
        authenticateUserAndSetSession(currentUser, (HttpServletRequest) FacesUtils.getExternalContext().getRequest());
        clearForm();
        return "/registered/home.html";
    }else{
        clearForm();
        return "/auth/login.html";
    }

}

private void authenticateUserAndSetSession(Users user, HttpServletRequest request)
{
     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
     user.getUsername(), user.getPassword());

     // generate session if one doesn't exist
     request.getSession();

     token.setDetails(new WebAuthenticationDetails(request));
     Authentication authenticatedUser = authenticationManager.authenticate(token);

     SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
     SecurityContext context = SecurityContextHolder.getContext();
}


我们需要在会话中设置安全上下文。否则就不行了。你可以用这个

SecurityContextHolder.getContext().setAuthentication(authentication);

request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());

在一个应用程序中,在成功登录和来自AuthenticationSuccessHandler的重定向之间,我丢失了登录凭据,但在另一个应用程序中,我没有丢失,而另一个应用程序基本上做了相同的事情

您可以这样尝试重定向:返回“redirect:CONTEXT-PATH/registered/home.html”;用上下文替换CONTEXT-PATH。@Ritesh我也尝试了重定向,但遇到了同样的问题。我从重定向发生的位置添加了整个日志。我有身份验证auth=SecurityContextHolder.getContext().getAuthentication();就在重定向和用户角色出现之前,主体对象是正确的。在重定向或post之后,似乎没有将对象保持在会话中…有什么想法吗?Ritesh,我还尝试创建了一个RememberMetauthenticationToken,而不是我正在使用的UsernamePasswordAuthenticationToken,但我没有找到org.springframework.security.authentication.RememberMetauthenticationToken的AuthenticationProvider,当我这样做时…你在哪里添加这些行?请解释你的答案请解释添加到哪里。请张贴完整的答案。
SecurityContextHolder.getContext().setAuthentication(authentication);

request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());