【问题标题】:Disallow access by default unless user has specific role using Spring Security默认情况下不允许访问,除非用户具有使用 Spring Security 的特定角色
【发布时间】:2018-04-10 09:31:07
【问题描述】:

我想配置 spring-security 使其默认不允许对我的 REST 端点的请求,仅在我指定访问条件时才允许访问。

我可以进行以下配置,而不是使用 @PreAuthorize("isAuthenticated()") 注释每个控制器方法

@Override
protected void configure(HttpSecurity http) throws Exception {
  http.authorizeRequests()
    .anyMatchers("/public/**).permitAll()
    .anyRequest().authenticated();
}

角色是否有类似的配置选项?我想让我的所有端点默认无法访问,并且必须为每个端点方法指定所需的角色(或者对于该端点,不需要角色)。

这样,如果我忘记指定所需的角色或不需要任何角色,则没有人可以访问。

【问题讨论】:

    标签: spring-security configuration annotations


    【解决方案1】:

    按角色保护 api

    例如。

     http.authorizeRequests()
        .antMatchers("/api/*")
        .access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
    

    【讨论】:

    • 有没有办法通过方法上的注释来指定所需的角色?然后您可以在服务方法上指定所需的角色。如果您在桌面应用程序中使用服务方法,它具有相同的角色要求,而无需再次为桌面客户端进行配置。
    • 是的,您可以在服务方法上使用 '@Secured` 注释,例如 @Secured("ROLE_ADMIN") 您需要启用它 @EnableGlobalMethodSecurity(securedEnabled = true)
    • 除非我用 @Secured("ROLE_ADMIN") 注释它们,否则有没有办法阻止访问服务方法?
    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2020-09-07
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多