У меня есть веб-приложение Spring Boot с некоторыми настройками безопасности для разных маршрутов.В проекте есть несколько ресурсов, перечисленных ниже:
- ресурсы /
- статические /
- шаблоны /
- config-файлы /
- application.properties
Проблема в том, что, хотя я могу загружать свои представления (без стилей) через механизм шаблонов (thymeleaf), все запросы к статическому содержимому возвращают код 401.
Теперь я искал и нашел много контентапо этому вопросу.Самое смешное, что здесь не загружаются файлы js, libs или css, но отображаются изображения.Чтобы уточнить: даже изображения возвращают коды 401 при отображении.
Некоторые из уже заданных вопросов, которые я нашел:
И я перекопал много весенней документации
Итак, вот мои файлы конфигурации, безопасности и входа в системупо тому, что я подделал, но все еще ничего не работает:
@EnableWebMvc
@Configuration
@ImportResource({"classpath:mongo-config.xml"})
public class ProjectConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(
"/img/**",
"/css/**",
"/js/**",
"/libs/**")
.addResourceLocations(
"classpath:/static/img/",
"classpath:/static/css/",
"classpath:/static/js/",
"classpath:/static/libs/");
}
@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("Security Config");
http .csrf().disable()
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/js/**","/css/**","/img/**","/libs/**").permitAll()
.antMatchers("/userManagement", "/userManagement/**", "/rest/auth").permitAll()
.antMatchers("/admin", "/admin/**").hasRole("ADMIN")
.antMatchers("/managementSettings", "/managementSettings/**").hasRole("MANAGEMENT")
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/**").hasAnyRole("USER", "DEMO", "MANAGEMENT")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.successHandler( CustomSimpleURLAuthenticationSuccesHandler())
.failureUrl("/login?error")
.and()
.logout()
.permitAll()
.logoutRequestMatcher( new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login")
.and()
.addFilterAfter(AjaxRedirectFilter(), ExceptionTranslationFilter.class)
.headers()
.httpPublicKeyPinning()
.addSha256Pins("*********************","*************************")
.includeSubDomains(true)
.maxAgeInSeconds(10000);
}
@Override
public void configure(WebSecurity web) {
web
.ignoring()
.antMatchers("/js/**","/css/**","/img/**","/libs/**");
}
<div class="content">
<img style="margin:auto" class="img-responsive" th:src="@{/img/logo.png}"/>
</div>
Я хотел бы отметить несколько вещей:
@ndom/img/logo.png}, кажется, является правильной конечной точкой для запроса из представления, потому что, если я что-то здесь изменяю, изображения не отображаются
Таким же образом, если я изменяю какой-либо маршрут из файлов безопасности или конфигурационных файлов, изображения не отображаются, поэтому маршрутытам тоже должно быть правильно
Если я открою инструменты разработчика браузера и открою вкладку сети, там написано: «Не удалось загрузить данные ответа», но если дважды щелкнуть файл, который он открываетфактически ресурс js в виде обычного текста, загруженного с сервера утилита dev захватывает & текстовый дисплей jQuery
Итак, свсе это, как говорится, как я могу загрузить все мои статические файлы в моем представлении?Я не против иметь собственные или стандартные пути, если я могу получить доступ к своим файлам