一尘不染

Spring Security,方法安全注释(@Secured)不起作用(java config)

java

我试图使用@Secured(“ ADMIN”)(没有任何XML,只有Java配置,Spring Boot)来设置方法安全注释。但是无法通过角色进行访问。

安全配置:

@Configuration
@EnableWebSecurity
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{

.....

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/api/**").fullyAuthenticated().and()
                .addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }

.....

}

我想限制对控制器方法的访问:

@RestController
@RequestMapping("/api/groups")
public class GroupController {

    @Autowired
    private GroupService groupService;

    @Secured("ADMIN")
    @RequestMapping
    public List<Group> list() {
        return groupService.findAll();
    }

}

通过url限制访问的工作方式是:

.antMatchers("/api/**").hasAuthority("ADMIN")

也许我忘记指定要限制角色了?

UPD: 按照规则,在@PreAuthorize("hasRole('ADMIN')")控制器层或服务层必须在哪一层?


阅读 482

收藏
2020-12-03

共1个答案

一尘不染

这个问题解决了。

我加 @EnableGlobalMethodSecurity(prePostEnabled = true)

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{
}

在控制器中,我更改@Secured("ADMIN")@PreAuthorize("hasRole('ADMIN')")

2020-12-03