Spring Security的基于JWT角色的授权

时间:2020-03-28 12:51:10

标签: java spring-boot authentication spring-security jwt

我想授予角色为“ ADMIN”的用户访问/ hello URL的权限 我有这样的安全配置。通过“ / authenticate” URL,我得到了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 :(得分:0)

从控制器中删除@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);
}