Spring Security,注册后登录

时间:2014-12-22 15:08:21

标签: spring spring-security

在我的项目中,我有2个模块:一个用于登录,另一个用于注册新用户。

如果用户已经存在,我使用Spring Security开发的登录模块工作正常,即登录后,用户ID将UserPrincipal存储到HttpServletRequest对象中。

为了注册新用户,我首先在数据库中输入,然后尝试使用Spring Security进行身份验证,我编写以下代码来执行此操作并且工作正常。

段:

UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());
authMgr.authenticate(auth);
SecurityContextHolder.getContext().setAuthentication(auth);

问题是我未在UserPrincipal中获得HttpServletRequest。 所以在调用setAuthentication(auth)之后,我调用request.getuserprincipal()并返回null。

3 个答案:

答案 0 :(得分:0)

使用以下代码行,我认为这会对您有所帮助:

Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, udetail.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
Principal principal = request.getUserPrincipal();

答案 1 :(得分:0)

问题解决了,代码完全相同,除了我必须重定向请求以在请求中添加UserPrincipal。令人惊讶的是,尽管在web.xml中为spring过滤器添加了前向调度程序,但request.forward仍无法正常工作。

答案 2 :(得分:0)

可能就在该行之后:SecurityContextHolder.getContext()。setAuthentication(auth);

我想补充一下: request.getSession()。setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,SecurityContextHolder.getContext());

否则,用户将无法进入Spring Security所需的会话中。