Как применить 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 шт):
У Spring Boot есть стандартный путь, по которому он берёт статические файлы. Это путь /resources/static
, и в матчерах его указывать не надо, так как при получении ресурсов по URL этот путь отбрасывается.
В матчерах вы должны указывать те папки, которые лежат по пути /resources/static
, без указания этой части.
Предположим, у вас есть следующие папки для ресурсов:
/resources/static/css
- для css-файлов/resources/static/js
- для js-файлов/resources/static/svg
- для svg-иконок
Тогда матчер для ресурсов должен выглядеть так:
.antMatchers("/css/**", "/js/**", "/svg/**").permitAll()