Как применить antMatchers для resources в Spring Security?

У меня есть контроллеры, которые используют стили CSS и шаблоны страниц, находящиеся в папке resources в проекте, абсолютный путь такой C:\Users\kakty\IdeaProjects\KafkaCon\src\main\resources**

Проблема:

Не удаётся настроить доступ через antMatchers для статических веб-ресурсов в папке resources

До прохождения аунтефикации стили не применяются, после того как пользователь залогинился, стили начинаются работать

Как я могу настроить работу Spring Security так, что бы стили и шаблоны начинали работать до авторизации пользователя ?

Конфигурация:

    @Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.csrf()
            .disable()
            .authorizeRequests()
            //Доступ только для не зарегистрированных пользователей
            //.antMatchers("/reg").not().fullyAuthenticated()
            //Доступ только для пользователей с ролью Администратор
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/news").hasRole("USER")
            //Доступ разрешен всем пользователей
            .antMatchers("/", "/resources/**","/resources/static/**", "/resources/static/CSS", "/resources/templates" ).permitAll()
            .antMatchers("/reg").permitAll()
            //Все остальные страницы требуют аутентификации
            .anyRequest().authenticated()
            .and()
            //Настройка для входа в систему
            .formLogin()
            .loginPage("/login")
            //Перенарпавление на главную страницу после успешного входа
            .defaultSuccessUrl("/hello", true)
            .permitAll()
            .and()
            .logout()
            .permitAll()
            .logoutSuccessUrl("/login");
    return http.build();
}

Ответы (1 шт):

Автор решения: Byb

У Spring Boot есть стандартный путь, по которому он берёт статические файлы. Это путь /resources/static, и в матчерах его указывать не надо, так как при получении ресурсов по URL этот путь отбрасывается.

В матчерах вы должны указывать те папки, которые лежат по пути /resources/static, без указания этой части.

Предположим, у вас есть следующие папки для ресурсов:

  • /resources/static/css - для css-файлов
  • /resources/static/js - для js-файлов
  • /resources/static/svg - для svg-иконок

Тогда матчер для ресурсов должен выглядеть так:

.antMatchers("/css/**", "/js/**", "/svg/**").permitAll()
→ Ссылка