Spring Security не обслуживает статический контент - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь получить Spring Security, чтобы разрешить подачу статических файлов, таких как .css .js и т. Д. Без необходимости входа в систему.

Я попытался создать конфигурацию MVC с обработчиком ресурсов и изменить правилав весенней конфигурации безопасности, но, похоже, ничего не работает.

MvcConfig.java:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**")
        .addResourceLocations("/assets/");
}

}

SecurityConfig.java:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/", "/assets/**")
            .permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
}

@Override
public void configure(WebSecurity web) {
    web.ignoring().antMatchers("/assets/**");
}

}

Когда я перехожу на http://localhost:8080/assets/js/particles.min.js Я ожидаю, что он вернет содержимое файла, но каждый раз, когда я пробую ссылки, такие как localhost: 8080 / assets / *, он возвращает содержимое login.html

Мои файлы активов Файлы моего проекта

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Предположим, что ваши статические файлы находятся под src/main/resources:

enter image description here

Есть две основные части для настройки:

РеализацияWebMvcConfigurer интерфейс для обнаружения ваших статических ресурсов:

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!registry.hasMappingForPattern("/assets/**")) {
            registry.addResourceHandler("/assets/**")
                    .addResourceLocations("/assets/");
        }
    }
}

Настройте конфигурацию безопасности таким образом, чтобы статические ресурсы (такие как CSS, JavaScripts и изображения) были общедоступными:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  // Your settings

    @Override  
    protected void configure(HttpSecurity http) throws Exception {

        // Your AuthN handlers and filter chain...

        http        
            .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/css/**").permitAll()
                .antMatchers("/img/**").permitAll()
                .antMatchers("/js/**").permitAll()
                .anyRequest().authenticated();

        // Logout handler...
    }
}

Предположим, что у вас есть файл CSS следующим образом:

src/main/resources/assets/css/layout.css

Веб-сервер сделает его доступным по адресу:

http://<root_url>:<port>/css/layout.css

0 голосов
/ 05 июня 2019

Попробуйте изменить на:

http.authorizeRequests()
        .antMatchers("/").permitAll()
        .antMatchers("/assets/").permitAll()
        .and()
        .authorizeRequests()
        .anyRequest()
        .authenticated()
        .and()
        .formLogin()
        .loginPage("/login")
        .permitAll()
        .and()
        .logout()
        .permitAll();
0 голосов
/ 05 июня 2019
web.ignoring().antMatchers("/assets/**");

В приведенном выше утверждении весенняя защита будет игнорировать любой запрос, начинающийся с «/ assets /» . Поэтому на вашем месте я удалю всю следующую конфигурацию:

.antMatchers("/", "/assets/**")
        .permitAll()

от configure(HttpSecurity http) метода.

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