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

Spring Boot 3.2.4角色权限配置问题:USER角色无法访问指定端点

问题原因

Spring Security的请求授权规则是从上到下依次匹配,一旦匹配到就会应用对应的权限规则。你的配置中先定义了/assignment/**需要ADMIN角色,这意味着所有以/assignment/开头的请求都会先匹配这条规则,包括/assignment/getGroceries和/assignment/order/**。当USER角色访问这些端点时,会被这条规则拦截,检查是否有ADMIN角色,自然返回403禁止访问。

修复方案

调整规则顺序,把更具体的端点权限规则放在前面,先定义USER角色可访问的端点,再定义剩余/assignment/**端点需要ADMIN角色的规则。修改后的SecurityFilterChain配置如下:

@Bean
public SecurityFilterChain web(HttpSecurity http) throws Exception {
    http
            .csrf(AbstractHttpConfigurer::disable)
            .authorizeHttpRequests((authorize) -> authorize
                    // 先配置USER角色可访问的具体端点
                    .requestMatchers(
                            "/assignment/getGroceries",
                            "/assignment/order/**")
                    .hasRole("USER")
                    // 再配置剩余/assignment/**端点需要ADMIN角色
                    .requestMatchers("/assignment/**")
                    .hasRole("ADMIN")
                    // 其他所有请求需要认证
                    .anyRequest()
                    .authenticated()
            )
            .httpBasic(Customizer.withDefaults());
    return http.build();
}
额外说明
  • 你的用户配置是正确的:ADMIN同时拥有USER和ADMIN角色,所以修改后ADMIN依然可以访问所有/assignment/下的端点,包括USER权限的端点。
  • 保留@EnableMethodSecurity注解可支持后续方法级别的权限控制,当前基于URL的配置已满足需求。

内容的提问来源于stack exchange,提问作者Abhishek Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:46