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

Spring Security角色认证403错误原因及解决方案

问题分析与解决

问题原因

你的配置存在两个核心问题导致403禁止错误:

  1. 缺少登录认证流程配置
    你只定义了资源的授权规则,但没有配置Spring Security的登录机制。当用户访问/user或/admin这类受保护接口时,Spring Security无法引导用户完成认证流程,直接返回403。

  2. CSRF防护的影响(测试场景下)
    Spring Security默认开启CSRF防护,如果通过Postman等非浏览器客户端直接访问接口,未携带CSRF Token的话,也会触发403错误。

另外需要确认:你是否在访问接口前完成了用户登录?未认证的用户访问受保护资源必然会被拒绝。

解决方法

1. 添加登录流程配置

修改securityFilterChain方法,添加formLogin()配置,开启默认的表单登录功能,让用户可以通过登录获取认证信息:

@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception {
    MvcRequestMatcher.Builder mvcMatcherBuilder = new MvcRequestMatcher.Builder(introspector);
    http.authorizeHttpRequests((requests) -> requests
            .requestMatchers(mvcMatcherBuilder.pattern("/home")).permitAll()
            .requestMatchers(mvcMatcherBuilder.pattern("/admin")).hasRole("ADMIN")
            .requestMatchers(mvcMatcherBuilder.pattern("/user")).hasRole("USER")
            .anyRequest().authenticated()
        )
        // 添加表单登录配置,开放登录页面权限
        .formLogin(form -> form.permitAll());
    return http.build();
}

2. 针对非浏览器客户端的CSRF处理(仅测试用)

如果用Postman等工具测试接口,可以临时关闭CSRF防护(生产环境不建议):

@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception {
    MvcRequestMatcher.Builder mvcMatcherBuilder = new MvcRequestMatcher.Builder(introspector);
    http.authorizeHttpRequests((requests) -> requests
            .requestMatchers(mvcMatcherBuilder.pattern("/home")).permitAll()
            .requestMatchers(mvcMatcherBuilder.pattern("/admin")).hasRole("ADMIN")
            .requestMatchers(mvcMatcherBuilder.pattern("/user")).hasRole("USER")
            .anyRequest().authenticated()
        )
        .formLogin(form -> form.permitAll())
        // 关闭CSRF防护(仅测试场景使用)
        .csrf(csrf -> csrf.disable());
    return http.build();
}

3. 角色配置验证

你的角色配置是正确的:roles("USER")会自动为用户添加ROLE_USER权限,hasRole("USER")也会自动匹配ROLE_USER前缀,这部分无需修改。

测试步骤

  1. 启动应用后,访问/user或/admin,会自动跳转到Spring Security默认的登录页面
  2. 使用user/password登录后,即可访问/user接口;使用admin/password登录后,即可访问/admin接口

内容的提问来源于stack exchange,提问作者Passion First

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:25:21