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

React使用Axios携带密码认证Spring+外部LDAP时出现403错误

问题排查与解决方案

1. 请求方法与路径不匹配

你的Spring Security配置仅要求GET请求/api/user/test需要认证:

.requestMatchers(HttpMethod.GET, "/api/user/test").authenticated()

但前端发送的是POST请求到/user/test(缺少/api前缀):

axios.post(`${apiurl}/user/test`,{}, ...)

这会导致:

  • POST请求/user/test匹配anyRequest().permitAll(),但如果后端未开放该路径的POST接口,或接口有其他权限控制,会返回403;
  • 路径前缀不一致导致认证规则未生效,引发权限问题。

解决办法:

  • 统一请求路径:前端改为${apiurl}/api/user/test,并确保请求方法与后端接口一致(若后端是GET接口则用axios.get);
  • 调整Security配置:若需要POST请求也认证,修改为:
.requestMatchers(HttpMethod.GET, "/api/user/test")
.requestMatchers(HttpMethod.POST, "/api/user/test").authenticated()

2. CSRF防护拦截POST请求

Spring Security默认开启CSRF防护,POST等非幂等请求需携带CSRF Token才能通过验证。你的API Key配置中关闭了CSRF,但HTTP Basic配置未关闭,导致POST请求被拦截返回403。

解决办法:
纯API场景下可直接关闭CSRF:

http
    .csrf(AbstractHttpConfigurer::disable)
    .authorizeHttpRequests(authorize -> authorize
        .requestMatchers(HttpMethod.GET, "/api/user/test").authenticated()
        .anyRequest().permitAll())
    .httpBasic(Customizer.withDefaults());

若需保留CSRF,需在前端请求中携带CSRF Token:从Cookie提取XSRF-TOKEN,并在请求头添加X-XSRF-TOKEN。

3. LDAP用户匹配规则不匹配

你的LDAP配置使用userSearchFilter("(uid={0})"),即通过uid字段匹配用户,但前端传递的用户名是abc,需确认LDAP中该用户的uid是否确实为abc(而非cn或其他字段)。

若表单登录正常但HTTP Basic失败,可能是表单登录用cn匹配,而HTTP Basic用uid匹配导致找不到用户,认证失败后返回403。

解决办法:

  • 检查LDAP用户属性,确保uid字段值为abc;
  • 若需用cn匹配用户,修改LDAP配置:
.userSearchFilter("(cn={0})")

4. 开启认证日志排查细节

添加Spring Security DEBUG日志,查看认证过程中的具体错误:
在application.properties中配置:

logging.level.org.springframework.security=DEBUG

通过日志可明确是认证失败、权限不足还是其他原因导致的403。


内容的提问来源于stack exchange,提问作者Man Man Yu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:35:58