Spring Boot App возвращает 401 для всего статического содержимого в ресурсах даже при загрузке изображений - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть веб-приложение Spring Boot с некоторыми настройками безопасности для разных маршрутов.В проекте есть несколько ресурсов, перечисленных ниже:

  • ресурсы /
  • статические /
    • css /
    • img /
    • js /
    • libs /
  • шаблоны /
  • 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>

Я хотел бы отметить несколько вещей:

  1. @ndom/img/logo.png}, кажется, является правильной конечной точкой для запроса из представления, потому что, если я что-то здесь изменяю, изображения не отображаются

  2. Таким же образом, если я изменяю какой-либо маршрут из файлов безопасности или конфигурационных файлов, изображения не отображаются, поэтому маршрутытам тоже должно быть правильно

  3. Если я открою инструменты разработчика браузера и открою вкладку сети, там написано: «Не удалось загрузить данные ответа», но если дважды щелкнуть файл, который он открываетфактически ресурс js в виде обычного текста, загруженного с сервера утилита dev захватывает & текстовый дисплей jQuery


Итак, свсе это, как говорится, как я могу загрузить все мои статические файлы в моем представлении?Я не против иметь собственные или стандартные пути, если я могу получить доступ к своим файлам

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

После долгих исследований и часов, пытавшихся решить проблему, было решено удалить устаревший код API REST, который мешал всей безопасности проекта.

Типичные вещи, которые можно ожидать от миграции проекта.

0 голосов
/ 18 февраля 2019

Необходимо настроить безопасность для URL-адресов активов, чтобы разрешить все, как и пятый сектор в этом учебном пособии https://www.baeldung.com/spring-mvc-static-resources. Я полагаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...