Сопоставители запросов 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;
}
...
}

Единственный выход, который я нашел, — это добавить регулярное выражение для переменной пути в конфигурации. НО WY Стандартное правило не работает?
Две конечные точки в контроллере:
@GetMapping("/{idOrCode}")
public ResponseEntity getServicePoint(@PathVariable String servicePointIdOrCode) {
LogUtil.info(log, "getServicePoint", "Get service point by id '%s'.", servicePointIdOrCode);

ServicePointDTO servicePointDTO = servicePointsService.getServicePoint(servicePointIdOrCode);

return ResponseEntity.ok(servicePointDTO);
}

@GetMapping("/short")
public ResponseEntity getAllServicePointsShort() {
LogUtil.info(log, "getAllServicePointsShort", "Get all short service points.");

List servicePointsShort = servicePointsService.getServicePointsShort();

return ResponseEntity.ok(servicePointsShort);
}


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

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

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

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

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

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