Когда включена защита spring, resouces (css или js) не может быть загружена

Ресурс находится под 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();

Может ли кто-нибудь помочь с этим? Спасибо заранее.

Ответ 1

Вероятно, вы захотите, чтобы ваш каталог содержал эти элементы, установленные как allowAll.

Вот выдержка из моего spring файла контекста безопасности. В каталоге ресурсов у меня есть папки js, css и images, которым разрешена эта строка.

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

Ответ 2

По какой-то причине это не сработало для меня:

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

Мне пришлось добавить это:

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

Кроме того, эта строка должна быть после кода, доступ к которому запрещен.

Ответ 3

Добавьте следующий

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

Ответ 4

У меня была такая же проблема, и смена доступа к "allowAll" не помогла. Я создал новый шаблон http, в котором я установил безопасность в "none", а затем я смог загрузить файлы css и js без проверки подлинности.

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

Ответ 5

Это, наконец, сработало для меня. В /home (что приведет к странице входа), а сообщения об ошибках не нуждаются в аутентификации. Все ресурсы являются allowAll, и /main url аутентифицирован. Любые другие URL-адреса (например, пользователи/клиенты и т.д.) Должны быть добавлены как 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" />