Spring 用户授予的权限始终为:角色\匿名?
我使用以下方法在注册后进行编程登录Spring 用户授予的权限始终为:角色\匿名?,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我使用以下方法在注册后进行编程登录 private void autoLogin(User user, HttpServletRequest request) { GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl( "ROLE_ADMIN") }; UsernamePasswordAu
private void autoLogin(User user,
HttpServletRequest request)
{
GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl(
"ROLE_ADMIN") };
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
user.getUsername(), user.getPassword(),grantedAuthorities);
// generate session if one doesn't exist
request.getSession();
token.setDetails(new WebAuthenticationDetails(request));
Authentication authenticatedUser = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
}
用户已通过身份验证,但始终具有匿名角色,我不知道为什么?
有什么想法吗 我遇到了类似的问题,在进行身份验证之后,我不得不手动设置会话
request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());
试试看。这种行为看起来很奇怪。Javi建议手动将安全上下文持久化到会话中,但应该由Spring security的
SecurityContextPersistenceFilter
自动完成
我能想象的一个可能的原因是注册处理页面的
中的filters=“none”
filters=“none”
禁用指定URL的所有安全筛选器。如您所见,它可能会干扰Spring Security的其他功能。因此,更好的方法是启用过滤器,但将其配置为允许所有用户访问。您有几个选择:
- 使用
属性的旧语法(即没有access
):
允许未经身份验证的用户访问,但拒绝已验证用户的访问access=“ROLE\u ANONYMOUS”
- 要允许所有用户访问,您可以编写
access=“IS\u AUTHENTICATED\u匿名、IS\u AUTHENTICATED\u完全、IS\u AUTHENTICATED\u membered”
- 使用(
)只需编写
即可允许所有用户访问(但其他access=“true”
也应使用此语法)
filters=“none”
,则不会执行过滤器。否则它们会被执行。你说,但是其他的也应该使用这种语法
,但是我同时使用access=“true”和filters=“none”,并且效果很好。你这是什么意思?这是否意味着如果我设置了过滤器,就不能在不同的拦截器上使用filters=“none”和access=“true”?