Я настраиваю конфигурацию безопасности с помощью Spring Security.
Мне интересно, можно ли переопределить роль для более конкретной c конечной точки с помощью HttpSecurity объект.
Допустим, у меня есть что-то вроде этого:
httpSecurity
.authenticationProvider(authenticationProvider)
.authorizeRequests()
.antMatchers("/api/v1/**").hasRole("ADMIN")
И я хочу иметь другую роль для более конкретной c конечной точки:
httpSecurity
.authenticationProvider(authenticationProvider)
.authorizeRequests()
.antMatchers("/api/v1/**").hasRole("ADMIN")
.antMatchers("/api/v1/specific").hasRole("ROLE_ONLY_FOR THIS_ENDPOINT")
И это не работает, для него все еще требуется роль ADMIN для указанной конечной точки c.
Можно ли как-то переопределить ее или исключить эту конечную точку из более распространенной правило роли?
Обновление 1 :
@PreAuthorize("hasAuthority('ROLE_SPECIFIC')")
@GetMapping("/specific")
public ResponseEntity<TopDamagedComponentsResponse> getTopDamagedComponents(
@RequestParam(required = true) String manufacturer,
@RequestParam(required = true) String model,
@RequestParam(required = true) String vehicleBodyType,
@RequestParam(required = true) String vehicleType,
@RequestParam(defaultValue = "25", required = false) Integer limit){
List<ComponentDto> topDamagedComponents = service.getTopDamagedComponents(manufacturer, model, vehicleBodyType, vehicleType, limit);
TopDamagedComponentsFilter filter = new TopDamagedComponentsFilter(manufacturer, model, vehicleBodyType, vehicleType);
return new ResponseEntity<TopDamagedComponentsResponse>(new TopDamagedComponentsResponse(topDamagedComponents, topDamagedComponents.size(), filter), HttpStatus.OK);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(tokenAuthFilter, BasicAuthenticationFilter.class)
.antMatcher("/**")
.authenticationProvider(authenticationProvider)
.authorizeRequests()
.antMatchers("/api/v1/**").hasRole("ADMIN")
.antMatchers("/v2/api-docs", "/swagger-resources/configuration/ui", "/swagger-resources", "/swagger-resources/configuration/security", "/swagger-ui.html", "/webjars/**").permitAll()
.antMatchers("/actuator/**").permitAll()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.csrf().disable();
}
Я пытался использовать @PreAuthorize
, но он все еще не работает.