Spring Security Ajax 被拦截

本文介绍如何解决SpringSecurity框架在使用Ajax POST请求时出现的403错误,通过在页面头部添加CSRF令牌,并在Ajax调用前设置请求头,确保安全控制的同时避免误拦截。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景是项目中使用Spring Security 进行安全控制

再使用Ajax的时候会报 403(ajax get  方式是没问题的 post 的时候会报)

Spring Security 原本是 防止 CSRF 攻击 现在 ajax 被误伤了...

然后下面贴解决方法,页面的head标签里 下记追加

(这里要说的是用的是thymeleaf模板 所有才会有 th:如果是jsp的话使用EL表达式吧th:去掉就能用了)

<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header"  th:content="${_csrf.headerName}"/>

然后用js取值

var header = $("meta[name='_csrf_header']").attr("content");
var token =$("meta[name='_csrf']").attr("content");

ajax中调用使用,其他和通常一样 beforeSend 里写下如下就可以了

        $.ajax({
            url : "",
            type : "POST",
            data : "",
            contentType : 'application/json;charset=utf-8',
            //async : false,
            beforeSend : function(xhr) {
                xhr.setRequestHeader(header, token);
            }, 
            success : function(resdata) {},
            error : function(xhr, ajaxOptions, throwError) { }
       });

更多专业前端知识,请上 【猿2048】www.mk2048.com
### 如何使用 Spring Security 配置拦截 HTTP 请求 #### 使用 Java Config 方式配置 Web 安全 为了实现对特定 URL 的访问控制,可以通过重写 `WebSecurityConfigurerAdapter` 类中的方法来进行自定义配置。下面展示的是如何创建一个名为 `SpringSecurityConfig` 的类来设置哪些路径可以被忽略以及如何保护其他资源。 ```java import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/js/**", "/css/**", "/images/**").permitAll() // 允许静态文件免认证访问 .anyRequest().authenticated(); // 所有其它请求都需要身份验证 http.formLogin(); // 启用表单登录方式 } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/static/**"); // 忽略指定目录下的所有请求 } } ``` 上述代码片段展示了如何通过覆盖默认行为来自定义安全策略[^3]。这里设置了 `/js`, `/css`, 和 `/images` 下的所有资源无需经过身份验证即可访问;而任何未特别指明的请求则需先完成用户认证过程才能继续执行下去。 对于 AJAX 请求来说,在某些情况下可能会遇到跨域资源共享 (CORS) 或者预检请求等问题。如果应用程序依赖于 JSON 数据交换,则应考虑调整 CORS 设置并确保正确处理 OPTIONS 方法等预飞行请求[^2]。 另外值得注意的一点是在实际项目开发过程中还可以利用内置接口如 `HttpFirewall` 来增强系统的安全性,防止恶意构造的URL攻击[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值