Когда включена защита 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" />