当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Security-Thymeleaf SEC:授权-URL不工作

卜高超
2023-03-14

默认情况下,SEC:authorize-URL标记不适用于Spring boot security:

git clone https://github.com/spring-projects/spring-boot

添加依赖项

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity3</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>
@RequestMapping("/")
public String home(Map<String, Object> model) {
model.put("message", "Hello World");
model.put("title", "Hello Home");
model.put("date", new Date());
return "home";
}

@RequestMapping("/admin/foo")
public String home2(Map<String, Object> model) {
    model.put("message", "Hello World");
    model.put("title", "Hello Home");
    model.put("date", new Date());
    return "home";
}
http.authorizeRequests().antMatchers("/login").permitAll()
    .antMatchers("/admin/**").hasRole("ADMIN")
...
<div sec:authorize="hasRole('ROLE_ADMIN')">
    has role admin
 </div>
 <div sec:authorize-url="/admin/foo">
    can see /admin
 </div>

我是不是漏掉了什么?这是预期的行为吗?我需要定义什么才能使authorize-url像使用XML配置安全性时那样工作?

此问题与SpringBootWebSecurityConfiguration中的基本身份验证及其自动配置有关:

在SampleMethodSecurityApplication中,通过替换以下命令更改ApplicationSecurity顺序:

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
@Order(SecurityProperties.BASIC_AUTH_ORDER + 1)
security.basic.enabled: false

我找到了以下解决办法。只需在SecurityConfig中手动注册安全拦截器:

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final WebSecurity web) throws Exception {
        final HttpSecurity http = getHttp();
        web.postBuildAction(new Runnable() {
            @Override
            public void run() {
                web.securityInterceptor(http.getSharedObject(FilterSecurityInterceptor.class));
            }
        });
    }

它允许您使用推荐的ACCESS_OVERRIDE_ORDER和http基本自动配置。我在这里张贴了更多的细节,任何解释为什么这是工作是赞赏的。

共有1个答案

温开畅
2023-03-14

使用thymeleaf-extras-springsecurity4应该可以解决这个问题

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
 类似资料:
  • 我正在尝试为uber生成授权url https://login.uber.com/oauth/authorize?client_id=xxxx&response_type=code&scope=history&redirect_uri=HTTP%3a%2f%2flocalhost%2fcallback 好的 https://login.uber.com/oauth/authorize?client

  • 我有以下Spring Security配置: 我想让每个人(包括经过身份验证的用户和未经身份验证的用户)都可以访问特定的页面(比如索引页面(“/”),但同时,能够根据用户是否经过身份验证以及其角色来管理应该在jsp中看到哪些部分。 我的jsp部分如下所示: 所有的认证机制都可以正常工作。问题是,即使我使用“管理员”角色登录,链接也永远不会显示。 我尝试调试我的userdetails服务实现,并验证

  • 我正在尝试使用Spring Boot、Spring Security4、Thymeleaf,如果用户有角色“admin”或其他任何东西,html块应该会显示出来,但现在它总是显示在页面上。这是我的html 这里是我的pom.xml,我添加了thymeleaf-extras-springsecurity4。还尝试了thymeleaf-extras-springsecurity3 这是我的securi

  • 我发现了许多类似的问题,但没有一个解决了我的问题。我的问题是可以访问的函数 下面是我的spring-security.xml代码。

  • 我想在我的Spring mvc项目之一中实现基于URL的授权。在我的Spring mvc项目中,我使用java配置。我已将此站点https://www.baeldung.com/role-and-privilege-for-spring-security-registration以实现基于角色和特权的授权。 所以我创建了下面的表来实现。 这是用户表。 这个角色表。 这是角色和特权之间的映射表。 这

  • 我正在尝试使用aws api网关授权器和cognito用户池。当我使用aws api网关控制台进行测试时,它工作得很好。 但当我尝试在api中启用授权时,它显示请查看下面的屏幕截图 有人能帮忙吗。