用户授予的权限始终是:ROLE_ANONYMOUS?

我在注册后使用以下方法进行程序化登录

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);

}

用户已通过身份验证,但始终具有ROLE_ANONYMOUS我不知道为什么?有任何想法吗 ?

回答:

这种现象看起来很奇怪。Javi建议手动将安全性上下文持久化到会话中,但是应该由Spring Security的自动完成SecurityContextPersistenceFilter

一个可能的原因,我可以想像是filters = "none"<intercept-url>你的登记处理的页面。

filters = "none"禁用指定URL的所有安全过滤器。如你所见,它可能会干扰Spring Security的其他功能。因此,更好的方法是保持启用过滤器,但将其配置为允许所有用户访问。你有几种选择:

  • 使用access属性的旧语法(即不使用<http use-expressions = "true" ...>):
  • access = "ROLE_ANONYMOUS" 允许未经身份验证的用户访问,但拒绝经过身份验证的用户
  • 要允许所有用户访问,你可以编写 access = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"
  • 使用新的基于Spring Expression Language的语法(<http use-expressions = "true" ...>),你只需编写access = "true"以允许所有用户访问(但其他<intercept-url>s也应使用此语法)。

    分享跟随

以上是 用户授予的权限始终是:ROLE_ANONYMOUS? 的全部内容, 来源链接: utcz.com/qa/435925.html

回到顶部