У меня непонятная ситуация. Я использую контроллер с любыми конечными точками. У меня есть два метода с конечными точками 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
Сопоставители запросов Spring Security 3.1.4 с переменной Pathvariable ⇐ JAVA
Программисты JAVA общаются здесь
1763976530
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79826514/spring-security-3-1-4-requestmatchers-with-pathvariable[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия