springsecurity 去除默认role_前缀?

发布于 2022-09-12 23:19:50 字数 851 浏览 13 评论 0

//    @Override
//    public void configure(WebSecurity web) throws Exception {
//        web.expressionHandler(new DefaultWebSecurityExpressionHandler(){
//            private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
//            @Override
//            protected SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, FilterInvocation fi) {
//                WebSecurityExpressionRoot root = new WebSecurityExpressionRoot(authentication, fi);
//                root.setDefaultRolePrefix("");
//                return root;
//            }
//        });
//    }
//    @Bean
//    GrantedAuthorityDefaults grantedAuthorityDefaults() {
//        return new GrantedAuthorityDefaults(""); // Remove the ROLE_ prefix
//    }

尝试的两种方法都无效

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

攀登最高峰 2022-09-19 23:19:50

你的意思是Security自动给你的角色加上前缀的步骤,你想去掉吧
你现在的代码运行时获取GrantedAuthority的时候是有ROLE_前缀的?
可能是你在add roles的时候加上了
spring security的org.springframework.security.core.userdetails.User#roles方法里面有一段硬编码

public UserBuilder roles(String... roles) {
            List<GrantedAuthority> authorities = new ArrayList<>(roles.length);
            for (String role : roles) {
                Assert.isTrue(!role.startsWith("ROLE_"),
                        () -> role + " cannot start with ROLE_ (it is automatically added)");
                authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
            }
            return authorities(authorities);
        }

你看看是不是调用了这个方法.如果调用了,不要用这个方法,改为使用#authorities这个方法
再补充一下,spring security的角色如果不要前缀的话,可能会带来一些麻烦,比如多维度鉴权的时候,就好像表达式和角色同时鉴权,你需要一个办法区分表达式和角色

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文