在我的项目中使用弹簧启动,弹簧安全和vaadin。
代码:
String username = ...
String password = ...
UsernamePasswordAuthenticationToken request = new UsernamePasswordAuthenticationToken(username, password);
Authentication result = authManager.authenticate(request);
SecurityContextHolder.getContext().setAuthentication(result);
我的身份验证管理器:
public Authentication authenticate(Authentication auth) throws AuthenticationException {
String username = (String) auth.getPrincipal();
String password = (String) auth.getCredentials();
MyUserDetails user = userService.loadUser(username,password);
Collection<? extends GrantedAuthority> authorities =u ser.getAuthorities();
return new UsernamePasswordAuthenticationToken(user,username, authorities);
任何重定向 SecurityContextHolder.getContext()丢失其内容并返回 null 。我能够找到的唯一信息是,在重定向之后,应该自动从会话中重新填充上下文,但在我的情况下不会发生这种情况。
修改 我试图直接从会话中检索spring securty上下文。
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
SecurityContextImpl sci = (SecurityContextImpl) attr.getRequest().getSession().getAttribute("SPRING_SECURITY_CONTEXT");
我不确定我是否正确操作但 SecurityContextImpl null 。