后端SpringSecurity+vue前端axios+uni-app解决跨站点请求伪造CSRF

本文详细介绍了SpringSecurity的配置方法,包括如何通过CookieCsrfTokenRepository设置CSRF保护,以及如何在Vue中配置axios以支持跨域并设置访问权限。此外,还探讨了在uni-app中如何配置CSRF,以及如何根据不同环境调整CSRF设置。

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

1.1.SpringSecurity配置,public class SecurityConfig extends WebSecurityConfigurerAdapter

 @Override
    protected void configure(HttpSecurity http) throws Exception {
     //code...
     http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }

2.vue组件axios,config.js,默认支持也可以不配置

axios.defaults.withCredentials = true // 设置cross跨域,并设置访问权限,允许跨域
axios.defaults.crossDomain = true
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8' // 设置post请求头
axios.defaults.headers.put['Content-Type'] = 'application/json;charset=utf-8' // 设置post请求头
axios.defaults.timeout = 60000 // 请求超时响应
axios.defaults.responseType = 'json' // 请求超时响应
axios.defaults.xsrfCookieName = 'XSRF-TOKEN'
axios.defaults.xsrfHeaderName = 'X-XSRF-TOKEN'

3.小程序请求框架为uni-app,由于不带cookie,可以配置CSRF小程序路径放开,小程序接口统一放在/miniapi路径下,对小程序统一鉴权有兴趣的我可以再写一篇

4.csrf按请求路径URL过滤,AntPathRequestMatcher实现/miniapi路径下请求不进行拦截

 @Override
    protected void configure(HttpSecurity http) throws Exception {
     //code...
     http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
http.csrf().requireCsrfProtectionMatcher(new CsrfSecurityRequestMatcher());
    }
public class CsrfSecurityRequestMatcher  implements RequestMatcher{
	private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
	private AntPathRequestMatcher antPathRequestMatcher=new AntPathRequestMatcher("/miniapi/**");

	@Override
	public boolean matches(HttpServletRequest request) {
		if(allowedMethods.matcher(request.getMethod()).matches()){
			return false;
		}
		boolean b = !antPathRequestMatcher.matches(request);
		return b;
	}
}

5.多环境支持
跨域只是为了保证生产环境安全,开发环境为了方便swagger使用和自动化测试,可以配置不开启

csrf: false
    @Value("${csrf}")
    private Boolean csrf;
  // 启用CSRF
        if(csrf){
            http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
            http.csrf().requireCsrfProtectionMatcher(new CsrfSecurityRequestMatcher());
        }else {
            http.csrf().disable();
        }
### 关于西门子杯数字孪生的相关信息 #### 西门子杯竞赛简介 西门子杯竞赛是一项专注于工业自动化信息化领域的赛事,旨在通过实际项目和创新思维培养学生的工程能力。其中,“数字孪生”作为近年来的重要主题之一,在比赛中占据核心地位。比赛通常围绕基于模型的设计、仿真优化以及智能制造展开。 #### 数字孪生技术文档案例教程 以下是关于西门子杯中涉及的数字孪生相关内容: 1. **技术文档** - 参赛者可以参考《数字孪生实战:基于模型的数字化企业》这本书籍[^2]。书中详细介绍了如何利用数字孪生技术推动装备制造业转型升级,并提供了多个具体方案,例如基于模型的三维设计仿真实现方法。 - 同时,《愚公系列——工业数字孪生企业应用实践》也是一份重要的参考资料[^1]。此书深入探讨了正向和逆向数字线程技术及其在工业场景下的实现路径。 2. **案例教程** - 实践篇部分展示了大量真实的工业案例,其中包括西门子自身的样板工厂经验分享。这些实例说明了如何借助数字孪生完成从产品开发到生产的全流程管理。 - 针对具体的参赛环节,建议关注以下几个方面: - 基于模型的企业 (Model-Based Enterprise, MBE) 的构建流程; - 工艺规划虚拟验证解决方案的实际操作指南; - 利用 Siemens NX 或 Teamcenter 等工具创建产品的数字孪生体[^4]。 3. **关键技术点** - 构建完整的数字线程贯穿整个生命周期是非常必要的。这不仅有助于提升产品质量,还能显著降低研发周期成本[^1]。 - 数据驱动型决策支持系统也是不可或缺的一部分。通过对实时采集的数据进行分析处理,从而指导物理实体运行状态调整[^3]。 ```python # 示例代码片段展示如何加载Siemens PLM Software中的数据接口 from siemens_plm import load_data_interface def initialize_digital_twin(): data = load_data_interface('product_model') twin_instance = create_digital_representation(data) return twin_instance twin = initialize_digital_twin() print(f"Digital Twin Initialized: {twin}") ``` 以上内容涵盖了理论知识框架搭建及动手实践两大部分,希望对你参加西门子杯有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值