使用 Spring 安全性在 Thymeleaf 中的静态资源的可见性

Posted

技术标签:

【中文标题】使用 Spring 安全性在 Thymeleaf 中的静态资源的可见性【英文标题】:Visability of static resourses in Thymeleaf with using Spring security 【发布时间】:2021-01-27 12:42:10 【问题描述】:

我有一个这样的目录层次结构:

-resources
|
|-static
|  |-css
|  |-js
|-templates
   |-error
   |-fragments

还有这个角色:

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception 
        httpSecurity
                .csrf()
                .disable()
                .authorizeRequests()
                .antMatchers("/login").not().fullyAuthenticated()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/main").hasRole("USER")
                .antMatchers("/resources/**", "/registration").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/main")
                .permitAll()
                .and()
                .logout()
                .permitAll()
                .logoutSuccessUrl("/login");
    

我需要一些帮助:1) 我的静态资源在授权之前是不可见的 2) 授权后重定向到css或js文件

请帮助我。我做错了什么?

【问题讨论】:

【参考方案1】:

您应该在资源文件夹中创建公用文件夹,Spring 将向所有人提供放置在 /css/**/js/**/images/** 文件夹中的文件,无需授权。

如果您将 img.jpg 放在像 src/main/resources/public/images/img.jpg 这样的图像文件夹中,则可以通过 http://localhost:8080/images/img.jpg 访问它

【讨论】:

【参考方案2】:

试试这个:

private static final String[] PUBLIC_MATCHERS = 
        "/css/**",
        "/js/**",
        "/images/**",
;
//...
    http
        .authorizeRequests().
        antMatchers(PUBLIC_MATCHERS).
        permitAll().anyRequest().authenticated();
//...

【讨论】:

不客气。 :) 几个月前我还是 Spring Boot 和 Thymeleaf 的初学者,我很高兴能帮助别人。

以上是关于使用 Spring 安全性在 Thymeleaf 中的静态资源的可见性的主要内容,如果未能解决你的问题,请参考以下文章

Spring 安全性和 Thymeleaf 不起作用

没有 Thymeleaf 的 Spring Boot 安全性

Thymeleaf 中的 Spring 安全表达式

Thymeleaf 和 Spring 引导以及 Spring 安全性不起作用

使用 Thymeleaf 时,Spring 安全会话范围似乎为空

Thymeleaf和Spring安全无法正常工作[重复]