Сопоставители запросов Spring Security 3.1.4 с переменной PathvariableJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сопоставители запросов Spring Security 3.1.4 с переменной Pathvariable

Сообщение Anonymous »

У меня непонятная ситуация. Я использую контроллер с любыми конечными точками. У меня есть два метода с конечными точками Get /short и /{idOrCode}. Переменная пути имеет строковый тип. Конечная точка с этой переменной пути имеет конфигурацию PermitAll() в SecurityFilterChain. Согласно документации, эти конечные точки для авторизации различаются. Однако когда я вызываю конечную точку /short без авторизации, я получаю от нее данные.
Конфигурация Spring Security:

Код: Выделить всё

   @Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.cors(Customizer.withDefaults())
.authorizeHttpRequests(auth ->
auth.requestMatchers("/api/v1/auth/authenticate",
"/actuator/**",
"/api/v1/service-point/{idOrCode}",
"/api/v1/service-point/parent/{servicePointId}")
.permitAll()
.requestMatchers(AUTH_WHITELIST)
.permitAll()
.requestMatchers("/api/v1/auth/change/admindata").hasRole(RoleEnum.BURNS.name())
.requestMatchers("/api/v1/auth/register").hasRole(RoleEnum.ADMIN.name())
.requestMatchers("/api/v1/auth/change/password")
.hasAnyRole(RoleEnum.ADMIN.name())
.requestMatchers(HttpMethod.POST).hasRole(RoleEnum.ADMIN.name())
.requestMatchers(HttpMethod.DELETE).hasRole(RoleEnum.ADMIN.name())
.requestMatchers(HttpMethod.PUT).hasRole(RoleEnum.ADMIN.name())
.requestMatchers(HttpMethod.PATCH).hasRole(RoleEnum.ADMIN.name())
.anyRequest()
.authenticated())
.sessionManagement(ssmng -> ssmng.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authenticationProvider(authProvider)
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);

return http.build();
}
и JWTFilter проверяет отсутствие jwt и отправляет его дальше по цепочке:

Код: Выделить всё

@Override
protected void doFilterInternal(
@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain
) throws ServletException, IOException {

final String authHeader = request.getHeader("Authorization");
final String jwt;
final String userName;
if (StringUtils.isBlank(authHeader) || !authHeader.startsWith("Bearer ")) {
filterChain.doFilter(request, response);
return;
}
...
}
Единственный выход, который я нашел, — это добавить регулярное выражение для переменной пути в конфигурации. НО ЧТО Стандартное правило не работает?

Подробнее здесь: https://stackoverflow.com/questions/798 ... thvariable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»