数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密.解密的方式. 本文目录 一.加密方案介绍二.实现原理三.实战四.测试五.踩到的坑 一.加密方案介绍 对接口的加密解密操作主要有下面两种方式: 自定义消息转换器 优势:仅需实现接口,配置简单.劣势:仅能对同一类型的MediaType进行加解密操作,不灵活. 使用spring提供的接口RequestBodyAdvice和ResponseBodyAdvice 优势:可以按照请求的Referrer…
本文以使用DES对称加密算法为例使用jdk对数据进行加密解密. 首先需要了解Provider类,它是jdk引入的密码服务提供者概念,实现了Java安全性的一部分或者全部.Provider 可能实现的服务包括: 算法(如DES.RSA.MD5):密钥的生成.转换和管理. 通常java运行时环境至少安装了一个名字为“SUN”的预设Provider,如果查看本机支持的Provider类型可以通过以下代码: for(Provider p : Security.getProviders()){ Syste…
前言 上个月公司另一个团队做的新项目上线后大体上运行稳定,但包括研发负责人在内的两个人在项目上线后立马就跳槽了,然后又交接给了我这个「垃圾回收人员」. 本周甲方另一个厂家的监控平台扫描到我们这个项目某些接口的一些敏感信息没有做加密,要求我们立马处理. 检查了一下发现还真是这样,手机.身份证号什么的都没脱敏,心里顿时一万头神兽在奔腾. 还好,我有长期应对这类突发事情的经验,直接写了一个自定义注解,然后在需要加解密的接口上加上,和前端一联调,欧克搞定,之后脸上保持沉重,但内心淡定摸鱼,好不潇洒. 趁…
参考: MyBatis之TypeHandler: https://www.cnblogs.com/yulinfeng/p/5991170.html   前段时间收到这么个需求:为安全起见,要求在数据库里保存的所有敏感信息(电话号码.email.身份证号码等等)都得加密.要是全都在java代码里控制,那就太麻烦了.还好mbatis有TypeHandler可以很好的解决这个问题.一劳永逸.   (如上面链接,这种方法可以被用来做任何类型转换的功能.)   第一步,先自定义一个类,继承自BaseTyp…
package test; import com.alibaba.fastjson.JSONObject; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec;…
yml增加配置 # 开发环境配置 server: tomcat: max-http-form-post-size: -1…
一.查阅开发文档 首先,要做这个功能前,我们必须先查阅后台接口文档,了解使用登录接口时,需要提交哪些参数,并且接口使用返回的数据. 这里我使用了一个返回json格式数据的登录接口为例,讲解怎么使用Ajax与后台接口交互. 由上图开发文档里,我们可以清楚的知道,要使用这个登录接口,我们只需要提交账号adminName和密码pwd两个参数. 二.编写javascript(Ajax)实现登录 var xmlhttp; if (window.XMLHttpRequest){//IE7+, Firefox…
你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:http://blog.pushy.site/posts/1518539601 如果你了解前端,肯定对AJAX不陌生,那么通过AJAX技术能够达到更新网页部分内容来达到加载其他信息的效果.通过AJAX我们可以来对文章进行优化,如果我们的博客在首页载入时就加载全部的文章,势必会影响加载速度,所以我们要来异步加载文章的内容,通过分页或者向下加载的方式来加载更多的文…
YAML是一种简洁的非标记语言,以数据为中心,使用空白.缩进.分行组织数据,从而使得表示更加简洁易读.本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程. 本文目录 一.YAML基本语法二.YAML支持的数据格式三.读取yml配置文件四.测试 一.YAML基本语法 以缩进代表层级关系 缩进不能使用tab,只能用空格 空格个数不重要,但是同一层级必须左对齐 大小写敏感 数据格式为,名称:(空格)值 注释单行用#,只能注释单行 二.YAML支持的数据格式 字面量:数字.字符串.布…
知识点: springboot中整合redis springboot中redisTemplate的使用 redis存数据时,key出现乱码问题 一:springboot中整合redis (1)pom.xml文件中引入依赖 <!--加入redis依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redi…
既然要做APP,与接口交互式少不了的,除非只是想做一个纯静态的APP.所以html5+的环境准备好后,我最先开始研究的就是如何与接口交互. 使用HBuilder新建示例教程后,里面会有一个ajax(网络请求)的列子,文件目录是examples/ajax.html.看了下这个文件的代 码,它的功能就是点击“提交”按钮后提交参数给接口,然后根据选择的返回数据格式,将一段字符串打印出来.我准备改造下这段代码,改由页面加载时调用列表 接口,并在APP里显示这段列表,毕竟这种情况应该经常会用到. 1.在l…
详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 ​ 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用.由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容. WebMvcConfigurer接口中的方法 举例1:configurePathMatch配置…
php7.1发布后新特性吸引了不少PHPer,大家都在讨论新特性带来的好处与便利.但是从php7.0 升级到 php7.1 废弃(过时)了一个在过去普遍应用的扩展(mcrypt扩展).官方提供了相应的解决提示,却没有提供更详细的解决办法.于是坑来了: 今天在使用微信开放平台对接一个内容管理系统的时候,在绑定公众号的时候一直失败 原因: 调试的时候发现,直接原因是因为开放平台里面填写的授权事件(该授权事件每十分钟会通送一次事件来更新ticket),即: 这个地方填写的url,调试发现,这个URL没…
数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后者通过对原始的数据进行加密以避免真实的内容被人窥视.数据保护是支撑ASP.NET身份认证的一个重要的基础框架,同时也可以作为独立的框架供我们使用.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S1301]数据的加解密(源代码) [S1302]Purpose字符…
android中使用jni对字符串加解密实现分析 近期项目有个需求.就是要对用户的敏感信息进行加密处理,比方用户的账户password,手机号等私密信息.在java中,就对字符串的加解密我们能够使用AES算法加密字符串.使用它的优点就不必多说了,但我们又知道android的源码是能够被反编译的,所以使用纯Java方式的AES加密是不安全的,所以想到了使用android中的jni来对字符串加解密处理,它会产生一个.so文件,更重要的是它通过C/C++代码实现.所以安全行比較高.它能够被反编译成机器…
背景 在springboot中使用redis缓存结合spring缓存注解,当缓存成功后使用gui界面查看redis中的数据 原因 springboot缓存默认的序列化是jdk提供的 Serializable 方式 解决方法 如果想要序列化成json格式的缓存数据,可以自定义一个redis的config类,设置序列化规则即可,如下: @Configuration public class RedisConfig extends CachingConfigurerSupport { @Autowir…
目录 本篇要点 后端参数校验的必要性 不使用Validator的参数处理逻辑 Validator框架提供的便利 SpringBoot自动配置ValidationAutoConfiguration Validator+BindingResult优雅处理 为实体类定义约束注解 使用@Valid或@Validated注解 发送Post请求,伪造不合法数据 Validator + 全局异常处理 定义全局异常处理 定义接口 @Validated精确校验到参数字段 定义接口 发送GET请求,伪造不合法信息…
一.前言 核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏.下面陈某带大家从以下三个方面讲解一下隐私数据如何脱敏,也是日常开发中需要注意的: 配置文件数据脱敏 接口返回数据脱敏 日志文件数据脱敏 文章目录如下: 二.配置文件如何脱敏? 经常会遇到这样一种情况:项目的配置文件中总有一些敏感信息,比如数据源的url.用户名.密码....这些信息一旦被暴露那么整个数据库都将会被泄漏,那么如何将这些配置隐藏呢? 以前都是手动将加密之后的配置写入到配置文件中,提取的时候再手…
<script> (function() { var Decode=function(b){var e;e=[];var a=b.width,c=b.height,d=document.createElement("canvas");d.width=a;d.height=c;d=d.getContext("2d");d.drawImage(b,0,0);b=d.getImageData(0,0,a,c);for(d=0;d<a*c*4;d+=4)[…
aware:英 [əˈweə(r)] 美 [əˈwer] adj.意识到的;知道的;觉察到的 XXXAware在spring里表示对XXX感知,实现XXXAware接口,并通过实现对应的set-XXX方法,然后就可以使用XXX了. 通俗的解释:如果在某个类里面想要使用spring的一些东西,就可以通过实行XXXAware接口告诉spring,spring会到最后给你送过来,而接收的方式是通过实现接口唯一的方法set-XXX.比如,有一个类想要使用当前的ApplicationContext,那么我…
vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios npm install axios main.js同级目录新建axios配置文件setaxios.js import axios from 'axios' // import store from './store' //vuex // import router from './router'…
本篇文章将介绍如何使junit在springBoot中测试文件的上传,首先先阅读如何在springBoot中进行接口测试. 文件上传操作测试代码 import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.t…
目录 一.在SpringBoot项目中配置Swagger2 1.pom.xml中对Swagger2的依赖 2.编写配置类启用Swagger 3.配置实体类的文档 4.配置接口的文档 5.访问文档 二.接口前后台分离的配置 1.接口分离 2.对前后台接口进行分组配置 在开发过程中,java后端需要与客户端进行交互,需要将后端的接口及参数写成文档给调用者查阅.一个问题也有此而生,需求改动频繁,接口设计也会随之改动,文档修改的不及时会带来很大的问题. Swagger是一个自动生成文档的工具,可以在线查…
手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是xboot前后端分离系统,后端的核心为SpringBoot 2.2.6.RELEASE,因此今天我主要讲述后端的操作实现,为了简化需求,我将需要导出的十几个字段简化为5个字段,导出的样式模板如下: 实现步骤: 打开一个你平时练习使用的springboot的demo,开始按照以下步骤加入代码进行操作.…
Thymeleaf中显示ajax请求所需依赖 <!--所需依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--去除HTML 严格规范--> <dependency> <group…
笔者的JSON如下: { "code": 10001, "message": "成功", "nextUrl": null, "data": { "updateTime": "2020-02-23 13:43:18", "result": [ { "confirm": 24, "suspect": 0, &qu…
背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个概念,把要多次使用的东西存在一个变量里,时不时取出来使用,就达到了缓存的目的,缓存就是存放数据的容器 那为什么要用缓存呢,是因为要多次使用.一个程序总有一些数据时可预见被多次使用(预见的准不准就是常说的命中率) 比如一个复杂的计算结果,一次数据库访问取得的数据等耗时耗资源的数据就能放入缓存,目的就是…
在springboot中,开发的确变的简单了很多,但是,开发者现在希望开发傻瓜式的方便搞定项目中的各种奇怪的需求最好了,不用烧脑,本来程序猿的生活就是枯燥的,不要再给自己添加更多的烦恼. 今天,就为了方便这点,介绍下,如何解决在开发过程中,一些场景下,为了实现一个配置模块中,基于开关量或者选择配置项,实现不同功能,例如,在一个session共享模块当中,解决session是基于header传递还是基于cookie传递这两种应用场景,有些应用中希望基于header传递sessionId,但是有些应…
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过ObjectContext来操作数据库的,一看是Object打头的,自然相当庞大,方法也比较多.到了经典的4.1版本,EF小组推出了一些更简单好用的API,就是DbContext,它包括更常用的方法.看看EF小组是怎么说的,原话:The Entity Framework 4.1 release also…
demo地址:demo-swagger-springboot springboot中swaggerUI的使用 1.pom文件中添加swagger依赖 2.从github项目中下载swaggerUI 然后把dist目录下的所有文件复制到springboot项目的webapp下面,修改index.html中的: url = "http://petstore.swagger.io/v2/swagger.json";为---------> url="http://localho…