使用Spring Security限制对控制器类中某些方法的访问以新引入的角色

时间:2018-10-22 11:13:41

标签: spring spring-security

没有@PreAuthorize("hasRole('ROLE_xxxx')")@Secured("ROLE_xxxx")批注的Controller方法的默认行为是什么。
 哪些角色可以使用这些方法?每个经过身份验证的用户都能调用这些方法吗?

考虑以下情况。
在使用Spring Security的现有应用程序上,我们引入了一种新型的用户角色,即“ ROLE_THIRD_PARTY_CONTRACTOR”,我们希望他们能够登录,但只允许他们访问某些Controller中的某些方法。如何限制那些用户访问不使用@PreAuthorize@Secured批注的方法?

1 个答案:

答案 0 :(得分:1)

您可以在到达控制器之前尝试在http级别进行保护。

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()                                                               
            .antMatchers("/resources/**", "/signup", "/about").permitAll()                  
            .antMatchers("/admin/**").hasRole("ADMIN")                                      
            .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")            
            .anyRequest().authenticated()                                                   
        .and()
        // ...
        .formLogin();
}

请参阅:https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-httpsecurity