Springboot项目之数据响应加密

对于一些安全级别比较高的项目,测试要求重要业务数据和敏感数据需要进行响应加密处理,等保三级项目需要数据传输加密就包括了请求和相应数据加密,请求数据可能会被拦截篡改对我们服务器造成威胁,所以可以利用网关进行项目中传输数据的统一加密,响应数据被拦截篡改只会影响浏览器展示,不会对服务器造成影响,所以响应加密只需要对重要业务数据和敏感数据进行加密即可,本编文章主要介绍响应加密

既然需要响应加密,那么前端肯定需要存储密钥,所以,要求我们请求加密和响应加密不允许使用相同的密钥对,对于响应加密,服务器端存储公钥和私钥的一半,前端浏览器存储一半,对于有条件的项目可以使用一次性密钥,只不过会对网页加载速度造成影响,这次我们使用固定的密钥对

基本思路为,前端公共组件js声明变量存储私钥的前半段,服务器端存储公钥和私钥的后半段,私钥后半段用户登录时可以利用tag标签写入到前台主页,然后针对响应加密的数据将密钥拼接起来对数据解密渲染页面,接下来我们看主要代码.本次采用国密算法,SM2+SM3对响应数据做处理

做数据响应加密处理时,可能我们的项目已经在测试阶段,所以就要求对项目影响最小,所以我们可以写一个jar包,然后项目进行依赖即可

1.实现ResponseBodyAdvice接口

package com.xxx;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import com.alibaba.fastjson.JSON;
import com.xxx.anntation.IsResponseEncrypt;
import com.xxx.base.security.sm3.SM3Utils;
import com.xxx.smcrypto.exception.InvalidKeyException;
import com.xxx.smcrypto.exception.InvalidSourceDataException;


@Component
@ControllerAdvice(basePackages="com.xxx")//需要扫描的包路径
@ConditionalOnProperty(name = "safety.responseIsEncrypt", havingValue = "true")//全局开关
public class EncodeResponseBody   implements ResponseBodyAdvice<Object> {

	/**
	 * 生成前段用于加解密的秘钥对
	 */
	public static final String getClientPri= "CB467B244DAC4A9F8E90DC4F14CB74BA";//后半段
    public static final String getClientPub="0451EA5DD060CC5E19091F35C48C129081688F5CFDB481AD5E9D0A024DC829586BC07B928CDB48A64B0795D58C97D26389B957F5B15B808C9EE74F5207AB663F1E";
    Sm2Utils utils = new Sm2Utils();
	@Override
	public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
		return returnType.hasMethodAnnotation(IsResponseEncrypt.class);//只针对使用指定注解的方法进行响应加密,此处返回false则不走此方法
	}

	@Override
	public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
			Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
			ServerHttpResponse response) {
                String data = JSON.toJSONString(body).toString();
				return utils.encryptFromText(getClientPub, data+"|"+SM3Utils.encrypt(data.toString()));


	}
}

2.利用tag标签将密钥后半段写入前台

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import com.xxx.EncodeResponseBody;

/**
 * @description:响应加密将秘钥通过tag标签传输到前台,前台存储前半段,tag标签输出后半段
 */
public class ResponseEncrypt extends TagSupport{
	private static final long serialVersionUID = 8444686156573978251L;
	@Override
	public int doStartTag() throws JspException {
		try {
			StringBuilder tmp = new StringBuilder();
			tmp.append("<script>")
							.append("window.ResponseEncrypt = '"+EncodeResponseBody.getClientPri+"';")//写入秘钥的后半段
							.append("</script>").toString();
			pageContext.getOut().print(tmp);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return super.doStartTag();
	}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>extension</shortname>
	<uri>http://secure.bodhi.com/taglib</uri>
	<tag>
		<name>responseEncrypt</name>
		<tagclass>com.aostarit.tag.ResponseEncrypt</tagclass>
		<bodycontent>scriptless</bodycontent>
	</tag>
</taglib>	
	

3.写一个自定义注解

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface IsResponseEncrypt {

}

4.最终使用的时候很简单,引入jar包,然后在需要响应加密的方法体上加上@IsResponseEncrypt 注解即可,会自动对当前方法体返回的数据进行加密

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SpringBoot项目光影视频是为摄影爱好者和视频制作人设计的视频内容管理和分享平台。它利用Spring Boot的快速开发特性,结合了视频上传、内容管理、用户互动、版权保护、高清流媒体播放以及社交分享等功能,旨在提供一个高效、丰富且用户友好的工具,以帮助创作者发布作品并构建社区。 以下是该光影视频平台的主要功能: 1. **视频上传与编码**:支持多种视频格式上传,并提供自动转码服务以适配不同设备和带宽。 2. **内容管理系统**:提供强大的内容管理工具,包括视频分类、标签、搜索和推荐等。 3. **用户注册与个人主页**:用户可以创建个人账户,拥有个人主页展示自己的视频作品。 4. **评论与互动**:允许用户对视频进行评论、点赞和收藏,促进社区内交流和互动。 5. **版权管理**:采用数字水印和元数据管理技术,保护原创内容的版权。 6. **高清流媒体播放**:支持高清视频播放,自适应码率切换确保流畅观看体验。 7. **社交分享集成**:一键分享到社交媒体平台,扩大视频内容的观众范围。 8. **移动设备优先设计**:采用响应式布局,使平台在不同大小的屏幕上均有良好展现,尤其适应移动设备。 9. **数据安全与隐私保护**:采取加密技术和访问控制策略,确保用户信息和视频内容的安全性和隐私性。 10. **易于维护和扩展**:前后端分离架构和模块化设计,方便未来根据视频平台的发展进行系统升级或功能拓展。 通过这些功能,基于Spring Boot的光影视频平台不仅提供了一个专业的视频管理和分享环境,还增强了创作者与观众之间的连接。系统的架构设计注重性能、可用性和可维护性,以支持高并发的视频流和动态的数据更新。其模块化的设计也便于未来根据视频内容产业的发展趋势增加新功能或升级现有功能,确保软件的长期适用性和技术前瞻性。
SpringBoot项目房产销售系统是为房地产企业设计的综合性房地产销售和管理平台。它利用Spring Boot的快速开发特性,结合了房源管理、客户关系管理(CRM)、销售流程跟踪、合同处理、财务报告以及市场分析等功能,旨在提供一个高效、精准且用户友好的工具,以帮助房地产公司优化销售流程和提升客户服务体验。 以下是该房产销售系统的主要功能: 1. **房源信息管理**:录入和维护房产信息,包括户型、面积、价格、配套设施和图片等详细数据。 2. **客户信息与跟踪**:构建客户数据库,记录客户需求、联系方式和跟进历史,提供个性化服务。 3. **销售流程管理**:自动化处理销售流程,从咨询、预约看房到签约和成交等环节。 4. **合同与交易处理**:生成和管理买卖合同,确保交易合规性,并自动生成交易记录。 5. **财务报表分析**:提供销售业绩统计、佣金计算和财务流水等报表,支持决策制定。 6. **市场动态分析**:分析市场趋势、价格变动和竞争对手情况,为战略规划提供依据。 7. **移动设备优先设计**:采用响应式布局,使平台在不同大小的屏幕上均有良好展现,尤其适应移动设备。 8. **数据安全与隐私保护**:采取加密技术和访问控制策略,确保房源信息和客户数据的安全性和隐私性。 9. **友好的用户操作界面**:界面直观易用,降低工作人员的学习成本,并提供多语言支持。 10. **易于维护和扩展**:前后端分离架构和模块化设计,方便未来根据房地产业务的发展进行系统升级或功能拓展。 通过这些功能,基于Spring Boot的房产销售系统不仅提高了房地产销售的效率和透明度,还加强了与客户的沟通和服务品质。系统的架构设计注重性能、可用性和可维护性,以支持高并发的数据访问和动态的数据更新。其模块化的设计也便于未来根据房地产市场的变化增加新功能或升级现有功能,确保软件的长期适用性和技术前瞻性。
SpringBoot项目人事系统是为公司或组织人力资源管理部门设计的自动化人事管理平台。它利用Spring Boot的快速开发特性,结合了员工信息管理、招聘流程、薪酬福利、考勤跟踪、绩效评估以及培训发展等功能,旨在提供一个高效、精准且用户友好的工具,以帮助人力资源部门简化人事流程和提升管理效率。 以下是该人事系统的主要功能: 1. **员工信息管理**:存储和管理所有员工的个人信息、职位历史和其他关键数据。 2. **招聘与录用**:管理招聘流程,包括职位发布、简历筛选、面试安排和录用通知。 3. **薪资和福利管理**:自动计算工资、奖金、福利和扣款,生成电子工资单。 4. **考勤和假期管理**:跟踪员工的出勤情况,包括迟到、早退、加班和请假记录。 5. **绩效评价系统**:定期进行员工绩效评估,设定目标并跟踪结果,支持反馈和发展计划。 6. **培训与发展模块**:规划和管理员工培训活动,记录培训进度和效果反馈。 7. **移动设备优先设计**:采用响应式布局,使平台在不同大小的屏幕上均有良好展现,尤其适应移动设备。 8. **数据安全与隐私保护**:采取加密技术和访问控制策略,确保员工数据的安全性和隐私性。 9. **友好的用户操作界面**:界面直观易用,降低工作人员的学习成本,并提供多语言支持。 10. **易于维护和扩展**:前后端分离架构和模块化设计,方便未来根据人事管理需求的变化进行系统升级或功能拓展。 通过这些功能,基于Spring Boot的人事系统不仅优化了人事管理的工作流程,还提高了数据处理的准确性和决策支持的效率。系统的架构设计注重性能、可用性和可维护性,以支持高并发的数据访问和动态的数据更新。其模块化的设计也便于未来根据人力资源业务的发展增加新功能或升级现有功能,确保软件的长期适用性和技术前瞻性。
SpringBoot项目车辆管理系统是一个为车辆租赁公司、企业车队和汽车服务中心设计的全方位管理平台。它利用Spring Boot的快速开发特性,结合了车辆登记、调度管理、维护跟踪、费用核算、GPS定位以及报表统计等功能,旨在提供一个高效、精确且用户友好的工具,以改善车辆管理效率和降低运营成本。 以下是该车辆管理系统的主要功能: 1. **车辆档案管理**:记录每辆车的基本信息和维护历史,便于管理和查询。 2. **调度与分配**:根据需求自动或手动安排车辆分配,优化资源使用。 3. **实时追踪与监控**:通过集成的GPS系统实时追踪车辆位置,确保安全并提升应急响应速度。 4. **维护提醒服务**:定期提醒进行车辆保养,保持车辆性能和延长使用寿命。 5. **费用管理**:自动计算与跟踪燃油消耗、维修和其他相关费用。 6. **移动设备优先设计**:采用响应式布局,使平台在不同大小的屏幕上均有良好展现,尤其适应移动设备。 7. **数据安全与隐私保护**:采取加密技术和访问控制策略,确保车辆和用户数据的安全性。 8. **友好的用户操作界面**:界面直观易用,降低工作人员的操作难度,并提供多语言支持。 9. **易于维护和扩展**:前后端分离架构和模块化设计,方便未来根据车辆管理需求变化进行系统升级或功能拓展。 10. **数据分析与报告**:提供丰富的图表和报告,帮助管理者分析车辆使用情况和财务状态。 通过这些功能,基于Spring Boot的车辆管理系统不仅提升了车辆使用的透明度和调度的合理性,还增强了维护管理的及时性和费用控制的有效性。系统的架构设计注重性能、可用性和可维护性,以支持高并发的数据处理和动态的数据更新。其模块化的设计也便于未来根据车辆管理领域的发展增加新功能或升级现有功能,确保软件的长期适用性和技术前瞻性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值