Spring и Keycloak: как выполнить ПАТЧ с помощью JSON - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь разрешить пользователям, которые не вошли в систему, использовать метод 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();
    }
}
...