Я пытаюсь разрешить пользователям, которые не вошли в систему, использовать метод PATCH. Но что бы я ни пытался, я получаю 403 при отправке запроса PATCH с помощью Postman. В чем может быть причина, по которой, особенно, класс контроллера не имеет аннотации @Secured?
Конфигурация:
@KeycloakConfiguration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class GlobalSecurityConf extends KeycloakWebSecurityConfigurerAdapter {
@Bean
KeycloakSpringBootConfigResolver keycloakConfResolver() {
return new KeycloakSpringBootConfigResolver();
}
@Autowired
void globalConfigurer(AuthenticationManagerBuilder auth) {
var authorityMapper = new SimpleAuthorityMapper();
authorityMapper.setPrefix("ROLE_");
authorityMapper.setConvertToUpperCase(true);
KeycloakAuthenticationProvider authProvider = keycloakAuthenticationProvider();
authProvider.setGrantedAuthoritiesMapper(authorityMapper);
auth.authenticationProvider(authProvider);
}
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.antMatchers("/**").permitAll()
.antMatchers(HttpMethod.PATCH, "/userinput/present/**").anonymous();
}
}
Контроллер
@RestController
@RequestMapping("/userinput")
public class UserInputRESTController {
private TreningService treningService;
public UserInputRESTController(TreningService treningService) {
this.treningService = treningService;
}
@PatchMapping("/present/{tid}")
public ResponseEntity<?> confirmPresenceByUser(@PathVariable Long tid) {
treningService.confirmPresenceByUser(tid);
return ResponseEntity.noContent().build();
}
}