Spring安全性不允许加载CSS或JS资源

时间:2014-08-18 17:08:50

标签: java css spring spring-mvc spring-security

资源在src / main / resources / static / css或src / main / resources / static / js下,我使用spring boot,安全等级是:

@Configuration
@EnableWebMvcSecurity
@EnableGlobalAuthentication
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
//      http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
//              .permitAll().anyRequest().authenticated();
//      http.formLogin().loginPage("/login").permitAll().and().logout()
//              .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication().withUser("test").password("test")
                .roles("USER");
    }
}

当我访问" / index"它运行良好(可以加载资源);但是,如果我取消注释该类中的四行,则无法加载资源,这四行意味着:

    http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
            .permitAll().anyRequest().authenticated();
    http.formLogin().loginPage("/login").permitAll().and().logout()
            .permitAll();

有人可以帮忙吗?提前谢谢。

7 个答案:

答案 0 :(得分:21)

您可能希望确保将包含这些项目的目录设置为permitAll。

这是我的春季安全上下文文件的摘录。在资源目录下,我有js,css和images文件夹,这些文件夹由此行授予权限。

<security:intercept-url pattern="/resources/**" access="permitAll" />

答案 1 :(得分:18)

出于某种原因,这对我不起作用:

http.authorizeRequests().antMatchers("/resources/**").permitAll();

我不得不补充一下:

http.authorizeRequests().antMatchers("/resources/**").permitAll().anyRequest().permitAll();

此外,此行必须在restrics访问的代码之后。

答案 2 :(得分:6)

添加以下

@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**").anyRequest();
    }

答案 3 :(得分:4)

你也可以直接使用&#34; / * .js&#34;对于特定文件或&#34; / resources / **&#34;目录

 http.authorizeRequests()
                .antMatchers("/", "/login", "/logout", "/error").permitAll()
                .antMatchers("/resources/**").permitAll()
                .antMatchers("/*.js").permitAll()
                .antMatchers("/api/**").authenticated()

答案 4 :(得分:4)

我遇到了同样的问题,permitAll()解决方案对我不起作用。我在@Override类中添加了以下WebSecurityConfig方法。

@Override
public void configure(WebSecurity web) throws Exception {
    web
            .ignoring()
            .antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/img/**", "/icon/**");
}

祝你好运!

答案 5 :(得分:0)

我遇到了同样的问题,改变对“permitAll”的访问权限并没有帮助。 我创建了一个新的http模式,我将安全性设置为“none”,然后我可以在没有身份验证的情况下下载css和js文件。

<http pattern="/resources/**" security="none" />

答案 6 :(得分:0)

这最终对我有用。 / home(将显示登录页面)和错误消息不需要身份验证。所有资源都是permitAll,并且/ url url已经过身份验证。任何其他网址(例如/ users / customers等..)都需要添加为isAuthenticated()

  <security:intercept-url pattern="/home" access="isAnonymous()"/>
  <security:intercept-url pattern="/error*" access="isAnonymous()"/>      
  <security:intercept-url pattern="/main" access="isAuthenticated()"/>
  <security:intercept-url pattern="/css/**" access="permitAll" />     
  <security:intercept-url pattern="/js/**" access="permitAll" />
  <security:intercept-url pattern="/fonts/**" access="permitAll" />
  <security:intercept-url pattern="/images/**" access="permitAll" />