Конфигурация Spring Boot + Spring Security permissionAll () и addFilter () не имеет эффекта

  1. URL-адрес с / login должен проходить через LoginFilter, где проверяются идентификатор пользователя и пароль - работает нормально
  2. Шаблон URL с / users / register не должен проходить через какой-либо файловый сервер, но он всегда проходит через фильтр JWTAuthentication - не работает нормально
  3. Все остальные шаблоны URL должны проходить через фильтр аутентификации JWTA для авторизации - работает нормально.

Ниже мой код для конфигурации безопасности. Пожалуйста, помогите мне с тем, чего мне не хватает в этом коде. Как настроить фильтр таким образом, чтобы аутентификация JWT выполнялась для шаблона URL, отличного от / login и / register

Ядро безопасности Spring: 4.2.3, загрузка пружины: 1.5.4

 protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers(HttpMethod.POST, "/login").permitAll()
            .antMatchers(HttpMethod.POST, "/users/register").permitAll()
            .anyRequest().authenticated()
            .and()
            // We filter the api/login requests
            .addFilterBefore(new LoginFilter("/login", authenticationManager()),
                    UsernamePasswordAuthenticationFilter.class)
            // And filter other requests to check the presence of JWT in header
            .addFilterBefore(new NoLoginAuthenticationFilter("/users/register"), UsernamePasswordAuthenticationFilter.class)
            .addFilterBefore(new JWTAuthenticationFilter("/**", authenticationManager()),
                    UsernamePasswordAuthenticationFilter.class);

}
5
0
4 181
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы хотите игнорировать определенные URL-адреса. Для этого переопределите метод configure, который принимает объект WebSecurity и игнорирует шаблон.

Попробуйте добавить переопределение метода ниже в свой класс конфигурации.

@Override
public void configure(WebSecurity web) throws Exception {
    web
    .ignoring()
    .antMatchers("/users/register/**");
}

он работает после изменения кода, как вам предложено. Спасибо за помощь!!.

Selva 30.03.2018 02:05

@Mahesh_Loya У меня аналогичная проблема, но, к сожалению, web.ignoring () не решает ее, потому что вызывает ошибку CORS. Есть ли способ исключить шаблоны URL без использования web.ignoring ()?

uiguyf ufdiutd 20.09.2020 18:34

@Override public void configure (HttpSecurity http) выдает исключение {http.cors (). ConfigurationSource (corsConfigurationSource ()) ‌ ....}

Mahesh_Loya 23.09.2020 16:16

@Bean CorsConfigurationSource corsConfigurationSource () {Конфигурация CorsConfiguration = новая CorsConfiguration (); configuration.setAllowedOrigins (Arrays.asList ("")); configuration.setAllowedMethods (Arrays.asList (" GET "," POST "," OPTIONS "," DELETE "," PUT "," PATCH ")); configuration.setAllowedHeaders (Arrays.asList (" X-Requested‌ -With "," Origin "," Content-Type "," Accept "," Authorization "," otherheader ")); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource (); source.registerCorsConfiguration (" / *", конфигурация); источник возврата;}

Mahesh_Loya 23.09.2020 16:18

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