gpt4 book ai didi

spring - 用户授予的权限始终为 : ROLE_ANONYMOUS?

转载 作者:行者123 更新时间:2023-12-04 14:19:27 25 4
gpt4 key购买 nike

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

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 建议手动将安全上下文持久化到 session 中,但这应该由 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"
  • 使用 new Spring Expression Language-based syntax ( <http use-expressions = "true" ...> ) 你只需写 access = "true"允许所有用户访问(但其他 <intercept-url> 也应使用此语法)。
  • 关于spring - 用户授予的权限始终为 : ROLE_ANONYMOUS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923296/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com