Авторизация на основе ролей JWT с помощью Spring Security - PullRequest
0 голосов
/ 28 марта 2020

Я хотел бы предоставить доступ к / привет URL пользователям, которые имеют роль «ADMIN». У меня есть такая конфигурация безопасности. С URL-адреса "/ authenticate" я получаю токен jwt.

    @Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/authenticate").permitAll()
            //.antMatchers("/hello").hasRole("ADMIN")
            .anyRequest().authenticated().
            and().
            exceptionHandling().and().sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}

Я пытался добавить аннотацию @PreAuthorize в мой контроллер, но он не работает, у всех пользователей есть доступ к этому URL.

    @GetMapping("/hello")
    @PreAuthorize("hasRole('ADMIN')")
    public String test(){
        return "Hello";
    }

1 Ответ

0 голосов
/ 28 марта 2020

После удаления аннотации @PreAuthorize из контроллера и изменения конфигурации безопасности, как это, это решило мою проблему.
@Darren Большое спасибо за ваш комментарий, он решил мою проблему.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
        .authorizeRequests()
        .antMatchers("/authenticate").permitAll()
        .antMatchers("/hello").hasAuthority("ADMIN")
        .anyRequest().authenticated().
        and().
        exceptionHandling().and().sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(jwtRequestFilter, 
        UsernamePasswordAuthenticationFilter.class);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...