如何使用默认允许的授权配置Spring MVC(spring boot)允许注释

时间:2014-06-21 06:36:14

标签: spring-mvc spring-security spring-boot spring-data-rest spring-hateoas

我希望我的Spring-HATEOAS API应用程序(基于Spring-Boot和Spring-MVC构建)配置安全性,默认情况下所有端点/控制器方法都是拒绝的,并且只能通过方法注释显式授予访问权限。 / p>

我已经能够获得它所以注释控制所有访问,但如果开发人员忘记添加注释,匿名用户可以访问该方法。我希望开发人员必须明确注释(或做一些其他显式的开发操作)方法才能允许匿名访问。

也许我需要编写一个自定义的AccessDecisionManager,但我认为有理由怀疑默认情况下拒绝行为...我只需要转动右旋钮。

我用这样的事情徒劳地试图做到这一点:

@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http        
        .authorizeRequests()
        .anyRequest()
        .hasRole("NOONEHASIT")
        ;
    }
}

和控制器如:

@Controller
public class RootController {

    @RequestMapping("/")
    @PreAuthorize("hasRole('DEFAULT') or isAnonymous()")
    public HttpEntity<RootResource> root(){
        //stuff
    }
}

认为没有人有这个角色,但这只是否认所有人。

谁有魔法酱?

1 个答案:

答案 0 :(得分:2)

如果没有明确允许您想要注释的路径,我无法想到是否可以这样做。因此,您需要另一个具有较低WebSecurityConfigurerAdapter的过滤器链(即另一个Order),该过滤器链明确允许访问您需要保护的所有路径。您可以将其自动化,例如使用@RequestMappings查找@PreAuthorize,但这将是繁琐的,我不确定它是否值得。

N.B。我不认为你需要在你的全能过滤器中不存在一个角色:你可以denyAll()