You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过antMatchers配置实现角色差异化URI权限控制?

Spring Security 权限配置解决方案

核心配置思路

Spring Security的antMatchers是按顺序匹配的,规则优先级由定义顺序决定。要解决你的问题,需要先开放指定URI给所有已认证角色,再限制ROLE_CUSTOMER的访问范围,最后放开ROLE_API和ROLE_USER的全局访问权限。

完整配置代码

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                // 开放指定5个URI给所有已认证角色
                .antMatchers(HttpMethod.POST, "/api/v1/beneficiaries/check")
                    .hasAnyRole("CUSTOMER", "API", "USER")
                .antMatchers(HttpMethod.GET, "/api/v1/accounts/{accountId}/beneficiary-accounts")
                    .hasAnyRole("CUSTOMER", "API", "USER")
                .antMatchers(HttpMethod.GET, "/api/v1/accounts/{idAccount}")
                    .hasAnyRole("CUSTOMER", "API", "USER")
                .antMatchers(HttpMethod.GET, "/api/v1/cards/{cardId}")
                    .hasAnyRole("CUSTOMER", "API", "USER")
                .antMatchers(HttpMethod.PUT, "/api/v1/cards/{cardId}/deactivate")
                    .hasAnyRole("CUSTOMER", "API", "USER")
                
                // 限制ROLE_CUSTOMER仅能访问上述URI,其余角色认证后可访问所有资源
                .anyRequest()
                    .access("hasRole('CUSTOMER') ? denyAll() : authenticated()");
    }

    // 可在此添加认证相关配置(如UserDetailsService、PasswordEncoder等)
}

配置说明

  1. 指定URI权限开放:针对每个URI的请求方法单独配置,明确允许三个角色访问,解决了ROLE_CUSTOMER无法访问PUT接口、ROLE_API/ROLE_USER被拦截的问题。
  2. 全局权限控制:通过SpEL表达式实现分支逻辑:
    • 若当前角色是ROLE_CUSTOMER,拒绝所有未在前面配置的请求
    • 若当前角色是ROLE_API或ROLE_USER,只要完成认证即可访问所有资源

常见问题排查

  • 确认角色名称配置正确:Spring Security默认会给角色名添加ROLE_前缀,因此代码中hasAnyRole("CUSTOMER")等价于检查权限ROLE_CUSTOMER
  • 不要将anyRequest()放在指定URI规则之前,否则会覆盖前面的精细配置
  • 验证PUT请求的路径变量({cardId})是否匹配,Spring Security的antMatchers支持路径变量匹配

内容的提问来源于stack exchange,提问作者Mohamed Aoutir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:13:35