Spring 5: Как загрузить статические ресурсы (css, js, изображения)

Я обновляю проект с Spring 4 до Spring 5, но загрузка статических ресурсов не работает. У меня есть свои ресурсы в src/main/resources/static/js, src/main/resources/static/css и src/main/resources/static/images

Я добавляю ResourceHandler в WebConfig следующим образом

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.job.controllers"})
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
            .addResourceLocations("classpath:/static/");
    }
    // more code here
}

Моя конфигурация безопасности, разрешающая доступ к статическим ресурсам, выглядит следующим образом

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override 
   protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/login**", "/static/**").permitAll()
   }
}

Когда я получаю доступ к http://localhost:8080/static/css/file.css

Получаю ошибку 405 Request method 'GET' not supported

Проблема, похоже, не в конфигурации безопасности, поскольку она не перенаправляет меня на страницу входа. Если я попробую использовать не общедоступный URL-адрес, например http://localhost:8080/some-place/css/file.css, я буду перенаправлен на страницу входа.

Проблема, похоже, в ResourceHandler.

Мои зависимости: spring-framework - 5.0.2.RELEASE and spring-security-5.0.0.RELEASE

Ни один из ответов на другие вопросы мне не подходит. другой вопрос Спасибо

проверьте это stackoverflow.com/questions/46567681/…

Evgeny 06.07.2018 18:19
1
1
449
1

Ответы 1

Я понял, что когда я закомментировал строку @ComponentScan(basePackages = {"com.job.controllers"}) в классе WebConfig, статические ресурсы загрузятся.

Это означало, что проблема была в одном из моих контроллеров.

Один метод контроллера был сопоставлен @RequestMapping(params = "settings/view", method = RequestMethod.POST)

Это сопоставление отображалось как INFO Mapped "{[],methods=[POST],params=[settings/view]}" onto ..... в журналах запуска.

Это было неправильное сопоставление, и оно препятствовало загрузке статических ресурсов.

Когда я исправил params на value, как это => @RequestMapping(value = "settings/view", method = RequestMethod.POST), статические ресурсы загружены.

Спасибо

Другие вопросы по теме