当前位置: 首页 > 面试题库 >

如何使用JavaConfig从Spring Security中删除ROLE_前缀?

公羊伟志
2023-03-14
问题内容

我正在尝试在Spring Security中删除“ ROLE_”前缀。我尝试的第一件事是:

http.servletApi().rolePrefix("");

那没有用,所以我尝试BeanPostProcessor按照http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-的建议创建一个jc.html#m3to4-role-prefixing-disable。那也不起作用。

最后,我尝试创建自己的SecurityExpressionHandler

  @Override
  protected void configure(HttpSecurity http) throws Exception {
      http
          .authorizeRequests()
          .expressionHandler(webExpressionHandler())
          .antMatchers("/restricted").fullyAuthenticated()
          .antMatchers("/foo").hasRole("mycustomrolename")
          .antMatchers("/**").permitAll();
  }

  private SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
      DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
      defaultWebSecurityExpressionHandler.setDefaultRolePrefix("");
      return defaultWebSecurityExpressionHandler;
  }

但是,这也不起作用。如果我使用“ hasAuthority(roleName)”代替hasRole,它将按预期工作。

是否可以从Spring Security的hasRole检查中删除ROLE_前缀?


问题答案:

从Spring 4.2开始,你可以使用单个bean定义前缀,如下所述:

@Bean
GrantedAuthorityDefaults grantedAuthorityDefaults() {
    return new GrantedAuthorityDefaults(""); // Remove the ROLE_ prefix
}

XML版本:

<beans:bean id="grantedAuthorityDefaults" class="org.springframework.security.config.core.GrantedAuthorityDefaults">
    <beans:constructor-arg value="" />
</beans:bean>


 类似资料:
  • 我正在尝试删除Spring Security中的“role_”前缀。我尝试的第一件事是: 是否可以从Spring Security的hasRole检查中删除ROLE_前缀?

  • 我正在我的控制器中检查一个角色“XXXXX”。但它只有在我添加前缀时才有效。 安全(“XXXXX”)不起作用,但当我添加

  • 问题内容: 我已经做过了,但是没有用。每当我访问它时,它都会转到。代码在这里给出: *我也添加了 *更新,但没有区别。另外,让我告诉您,我正在地址栏中输入地址,然后按Enter。我说的对吗?浏览器如何发现它不需要从服务器刷新? 更新#2 理想的情况是我想要的网址为和到。现在给出404 更新#3 我正在使用nginx代理,如果有帮助的话。 更新#4 擦除的缓存。现在我可以看到,而不是,但仍给404

  • 显示:“28 februari 2013 09:24” 但我想删除最后的时间。我怎么能那样做? 我在用Moment.js。

  • 问题内容: 我陷入了XML和Python的困境。任务很简单,但到目前为止我还无法解决,花了那么长时间。我是来这里咨询如何用几行解决它的。 感谢您对遍历树的任何帮助。我总是以太多或太少的元素结束。元素可以无限制地嵌套。给出的例子只是一个例子。我会接受任何解决方案,而不是对dom,minidom,sax等等不挑剔。 我有一个与此类似的XML文件: 我需要的是-解析XML并编写一个新文件。新文件应包含给

  • 使用PHP Composer从Laravel中删除包的正确方法是什么? 到目前为止,我已经尝试过了: 从文件composer.json中删除声明(在要求部分) 从文件中删除任何类别名app.php 从我的代码中删除对包的任何引用:-) 运行 运行 这些选项都不起作用!我错过了什么?