当前位置: 首页 > news >正文

mybatis-generator自定义TypeHandler进行加密解密

背景:公司需要将部分验证码进行加密入库,查询的时候解密。

初始时:在每次的逻辑代码中,涉及到该字段的新增,修改,都需要对指定字段进行加密。查询的时候对字段进行解密(缺点:可维护性太差)

改进后:使用mybatis的TypeHandler进行配置后,自动进行对指定字段进行加解密。

下面看下配置吧!

一、首先自定义一个TypeHandler,我这里继承的BaseTypeHandler。

继承后重写4个父类方法即可。根据自己的业务要求可以改变逻辑(我们公司是加解密,其他对字段的操作都可以写这里)

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(value = String.class)
public class SafetyAESTypeHandler extends BaseTypeHandler {/*** 插入数据库时加密** @param ps* @param i* @param parameter* @param jdbcType* @throws SQLException*/@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, SafetyAESConstant.PREFIX + AESUtils.AESEncode(SafetyAESConstant.aesPassword, (String) parameter));}/*** 查询时解密** @param rs* @param columnName* @return* @throws SQLException*/@Overridepublic Object getNullableResult(ResultSet rs, String columnName) throws SQLException {String result = rs.getString(columnName);if (StringUtils.isNotBlank(result)) {if (result.startsWith(SafetyAESConstant.PREFIX)) {return AESUtils.AESDncode(SafetyAESConstant.aesPassword, result.substring(SafetyAESConstant.PREFIX_LEN));}}return result;}/*** 查询时解密** @param rs* @param columnIndex* @return* @throws SQLException*/@Overridepublic Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String result = rs.getString(columnIndex);if (StringUtils.isNotBlank(result)) {if (result.startsWith(SafetyAESConstant.PREFIX)) {return AESUtils.AESDncode(SafetyAESConstant.aesPassword, result.substring(SafetyAESConstant.PREFIX_LEN));}}return result;}/*** 查询时解密** @param cs* @param columnIndex* @return* @throws SQLException*/@Overridepublic Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String result = cs.getString(columnIndex);if (StringUtils.isNotBlank(result)) {if (result.startsWith(SafetyAESConstant.PREFIX)) {return AESUtils.AESDncode(SafetyAESConstant.aesPassword, result.substring(SafetyAESConstant.PREFIX_LEN));}}return result;}}
 

二、在myabtis自动生成mapper等文件时,配置generatorConfig.xml

对需要处理的字段加上配置

<columnOverride column="old_value" jdbcType="VARCHAR" typeHandler="com.qkwl.service.user.handler.SafetyAESTypeHandler"/>

typeHandler属性,指定该列使用到的TypeHandler,配置类型处理器的全限定名

<table schema="" tableName="f_user" domainObjectName="UserEntity"modelType="flat" mapperName="base.UserBaseMapper"enableSelectByPrimaryKey="true" enableSelectByExample="true"enableDeleteByPrimaryKey="true" enableDeleteByExample="true"enableUpdateByPrimaryKey="true" enableUpdateByExample="true"enableCountByExample="true" enableInsert="true"><generatedKey column="fid" sqlStatement="MySql" identity="true"/><columnOverride column="fauthenticator" jdbcType="VARCHAR" typeHandler="com.service.user.handler.SafetyAESTypeHandler"/><columnOverride column="furl" jdbcType="VARCHAR" typeHandler="com.service.user.handler.SafetyAESTypeHandler"/></table>

三、自动生成后,mapper.xml

resultMap中返回的字段中,会带上typeHandler="com.service.user.handler.SafetyAESTypeHandler"
<result column="fauthenticator" jdbcType="VARCHAR" property="fauthenticator" typeHandler="com.service.user.handler.SafetyAESTypeHandler" /><result column="furl" jdbcType="VARCHAR" property="furl" typeHandler="com.service.user.handler.SafetyAESTypeHandler" />

1.第一个注意点

因为有时候我们不是一开始就使用这个操作字段。

所以很多的select返回都是对应的实体类,这样的话,这个字段实际是没有在查询的时候进行解密。

使用到需要自定义字段的resultType改为resultMap。

2.第二个注意点

我们后面自己手动加的insert和update一定也要注意,加上typeHandler属性,不然的话不会加密保存,如果需要根据这个字段delete的话,也需要!!

#{fauthenticator,jdbcType=VARCHAR,typeHandler=com.service.user.handler.SafetyAESTypeHandler}

总结:感觉开发的时候使用还是很简单。但是对于刚接手这个模块的人需要去提醒他这些配置问题,不然后来的人也不知道为什么就没有加密啦。

如果有问题,请各位指出,非常感谢!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

线性封闭区域2D刀路讲解

在学习UG教程的过程中往往要学习UG编程&#xff0c;想尽快速成&#xff0c;可以按照下面UG编程学习步骤&#xff1a; 步骤1、装上编程软件-UG&#xff0c;我们尽量装NX10.0版本&#xff0c;因为它是一个很稳定的一个版本&#xff0c; 步骤2、装上UG的最佳伙伴-优品外挂&#…...

TCP/IP网络协议以及Android网络优化方案

引用文章地址&#xff1a;TCP/IP网络协议 文章目录TCP/IPTCP/IP 模型TCP 和 UDPTCP怎么保证传输过程的可靠性&#xff1f;TCP 为什么要三次握手/四次挥手网页请求一个 URL 的流程DNS 工作原理HTTPS 加密原理移动端如何优化一个网络请求呢&#xff1f;DNS 优化CacheControlQ&…...

webSocket服务端与客户端消息通讯

一、WebSocket是HTML5出的东西&#xff08;协议&#xff09;&#xff0c;也就是说HTTP协议没有变化&#xff0c;或者说没关系&#xff0c;但HTTP是不支持持久连接的&#xff08;长连接&#xff0c;循环连接的不算&#xff09; 首先HTTP有1.1和1.0之说&#xff0c;也就是所谓的k…...

Vue 虚拟列表,纵享丝滑

转载文章&#xff1a;https://juejin.cn/post/6937939870018961439...

文华财经指标软件指标博易大师软件指标公式

CDJZ:ABS(MA(C,N3)-MA(C,120))/MA(C,120) < 0.5; 阶段卖出: 3.2,COLORLICYAN; 清仓卖出: 3.5,COLOR0088FF,DOTLINE; STICKLINE(动力线 > REF(动力线,1) ,动力线 ,REF(动力线,1),3 ,1),COLORRED; STICKLINE(动力线 <REF(动力线,1) ,动力线 ,REF(动力线,1),3 ,1),CO…...

redis数据结构

redis的使用 http://c.biancheng.net/view/4506.html 以下内容均来自该网站 http://c.biancheng.net/view/4540.html 1 字符串数据结构 上面是Redis字符串数据结构 哈希数据结构 一个key对应着一个hash结构&#xff0c;这个hash结构里面也是有很多键值对&#xff0c;key-va…...

简单的出入库管理软件一体化管理

关于库房管理软件&#xff0c;很多人都会问到这样的问题&#xff1a;有免费仓库出入库管理软件推荐吗&#xff1f;有没有简单上手&#xff0c;不收费的管理软件&#xff1f;找一款只需要看到库存的软件&#xff1f;等等&#xff0c;其实现在市面上很多出入库管理软件&#xff0…...

【Servlet】servlet中文显示问题

通过servlet类的doGet、doPost、service方法的HttpServletRequest request获取的参数中&#xff0c;如果有中文会出现乱码问题。 同样&#xff0c;通过HttpServletResponse response返回浏览器的html字符串中&#xff0c;也会出现中文乱码问题。 public class LoginServlet ex…...

2021年婴儿监护器行业最新趋势报告——附下载链接

来源 | 凯度&天猫 婴儿监护器在全球范围快速增长&#xff0c;目前北美市场仍占主导地位。但是中国婴儿监护器市场占有率增长迅速&#xff0c;预计到2021年&#xff0c;婴儿监护器市场全球市场中&#xff0c;中国份额将达9.09%。天猫上&#xff0c;婴儿监护器销售增长尤为迅…...

从零开始学习C语言之联合体(参考结构体类比着看)

还没想好怎么写&#xff0c;先鸽着&#xff0c;抽空补上...

进出境快件如何报关

&#xff08;一&#xff09;快件的报关  1.快件的报关和查验应当在运营人所在地海关办公时间和专门监管场所内进行。如需在海关办公时间以外或专门监管场所以外进行&#xff0c;需事先商得海关同意&#xff0c;并向海关无偿提供必需的办公场所及必备的设施。 2.进境的快件…...

深度学习常用数据集

常用数据集Iris数据集&#xff08;鸢尾花数据集&#xff09;MushRoom数据集&#xff08;蘑菇数据集&#xff09;Bostom Housing数据集&#xff08;波士顿房价数据集&#xff09;Linnerrud 数据集MINST数据集Caltech101数据集Caltech256数据集CIFAR-10数据集CIFAR-100数据集SVHN…...

HTTP-2做错了什么?刚刚辉煌2年就要被弃用了!?

最近一段时间以来&#xff0c;关于HTTP/3的新闻有很多&#xff0c;越来越多的国际大公司已经开始使用HTTP/3了。 所以&#xff0c;HTTP/3已经是箭在弦上了&#xff0c;全面使用只是个时间问题&#xff0c;那么&#xff0c;作为一线开发者&#xff0c;我们也是时候了解下到底什么…...

JVM篇-知识点梳理

导致OutOfMemoryError异常的常见原因&#xff1a; 1内存中加载的数据量过于庞大&#xff0c;如一次从数据库取出过多数据&#xff1b; 2集合类中有对对象的引用&#xff0c;使用完后未清空&#xff0c;使得JVM不能回收&#xff1b; 3代码中存在死循环或循环产生过多重复的对…...

转载 | 各种数据库JDBC下载

原文链接点击打开链接各种数据库驱动数据库名称下载地址说明Mysqlhttp://www.mysql.com/products/connector/j/Shipped. But need to download the latest for MySQL 4.1 or higher.Oraclehttp://sourceforge.net/project/showfiles.php?group_id33291software/tech/java/sqlj…...

Hibernate对实际数据进行操作

//增 public static void main(String[] args){ Configuration cfg null; SessionFactory sf null; Session session null; Transaction ts null; User u new User(); System.out.println("请输入用户信息:&quo…...

sql中grant授权语句revoke撤销语句

MySQL 赋予用户权限命令的简单格式可概括为&#xff1a; grant 权限 on 数据库对象 to 用户 一、grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利 grant select on testdb.*to common_user%; grant insert on testdb.*to common_user%; gran…...

QT如何设置小程序不被重复启动多个该程序

添加互斥锁 判断 如果进程有该程序&#xff0c;则return不运行 #if defined Q_OS_WIN32 //for win #include <windows.h> bool checkOnly() {// 创建互斥量HANDLE m_hMutex CreateMutex(NULL, FALSE, L"fortest_abc123" );// 检查错误代码if (GetLas…...

政产学研各界推动软件和信息技术服务业增速发展

​日前&#xff0c;工业和信息化部发布的最新数据显示&#xff0c;上半年&#xff0c;我国软件和信息技术服务业业务收入呈加快增长态势&#xff0c;完成软件业务收入44198亿元&#xff0c;同比增长23.2%&#xff0c;近两年复合增长率为14.7%。 从利润水平来看&#xff0c;上半…...

带你了解DDoS攻击的原理,让你轻松学会DDoS攻击原理及防护措施

DDoS攻击原理是什么? 随着网络时代的到来&#xff0c;网络安全变得越来越重要。在互联网的安全领域&#xff0c;DDoS(Distributed DenialofService)攻击技术因为它的隐蔽性&#xff0c;高效性一直是网络攻击者最青睐的攻击方式&#xff0c;它严重威胁着互联网的安全。接下来的…...

sql中grant授权语句revoke撤销语句

MySQL 赋予用户权限命令的简单格式可概括为&#xff1a; grant 权限 on 数据库对象 to 用户 一、grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利 grant select on testdb.*to common_user%; grant insert on testdb.*to common_user%; gran…...

uniapp

uniapp基础项目结构介绍开发方式1.使用HBuilderX快速开发2.使用脚手架快速搭建和开发样式和sass基本语法⭐事件⭐组件⭐生命周期⭐项目 懂你找图技能点功能基础跟着黑马学&#xff0c;项目找别的。基础 项目结构介绍 开发方式 1.使用HBuilderX快速开发 2.使用脚手架快速搭建…...

5852. 最小化目标值与所选元素的差 记忆化dfs,关键在于你怎么定义变量

目录解题思路代码解题思路 当时是个周赛题&#xff0c;试图利用爆搜解决的。。。。 显然不行&#xff0c;然后又听有人说是个背包QAQ dl都欺负我(╥╯^╰╥)嘤嘤嘤 不过了解了二维数组第一维放行数第二维放和&#xff0c;&#xff0c;&#xff0c;瞬间感觉记忆化搜索又可以…...

在java程序中使用protobuf

文章目录简介为什么使用protobuf定义.proto文件编译协议文件详解生成的文件Builders 和 Messages序列化和反序列化协议扩展总结简介 Protocol Buffer是google出品的一种对象序列化的方式&#xff0c;它的体积小传输快&#xff0c;深得大家的喜爱。protobuf是一种平台无关和语言…...

Anime+Vue<svg画线动画>从安装到入门使用

1.安装Anime并全局使用 npm install animejs --saveimport anime from "animejs";2.在阿里巴巴矢量图标库复制&#xff08;或者下载&#xff09;svg到页面中,注意&#xff1a;画线动画svg图标stroke属性必须有颜色值。不然看到个毛线! <template> <div> …...

分享:关于 JVM 内存的 N 个问题和定位工具

JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢? 首先是程序计数器(Program Counter Re…...

以太坊基础入门

以太坊特点 • 以太坊是“世界计算机”&#xff0c;这代表它是一个开源的、全球分布的计算 基础设施 • 执行称为智能合约&#xff08;smart contract&#xff09;的程序 • 使用区块链来同步和存储系统状态以及名为以太币&#xff08;ether&#xff09;的加密 货币&#xff0…...

Centos8.0系统升级到最新版本

一 &#xff0c;Centos8.0更换国内源&#xff08;阿里源&#xff09; 1&#xff0c; 备份旧的配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2&#xff0c;进入cd /etc/yum.repos.d cd /etc/yum.repos.d3&#xff0c;下载新的 Ce…...

政产学研各界推动软件和信息技术服务业增速发展

​日前&#xff0c;工业和信息化部发布的最新数据显示&#xff0c;上半年&#xff0c;我国软件和信息技术服务业业务收入呈加快增长态势&#xff0c;完成软件业务收入44198亿元&#xff0c;同比增长23.2%&#xff0c;近两年复合增长率为14.7%。 从利润水平来看&#xff0c;上半…...

代理和负载均衡的详细说明是什么

对客户端提供的代理服务&#xff0c;在客户端无法直接访问服务端的情况下&#xff0c;星池StarPool通过配置代理服务器的方式访问服务端。在整个过程中&#xff0c;客户端请求首先发送到代理服务器&#xff0c;代理服务器再将请求发送到服务端后将结果返回给客户端。从服务端角…...

广州python培训排名机构

近日&#xff0c;工业和信息化部教育与考试中心颁发了2021年第二批《大数据分析师》职业能力等级证书。 根据大数据产业发展的新技术、新规范、新要求&#xff0c;参考国内外先进标准进行开发和授课&#xff0c;工业和信息化部教育与考试中心对考核通过的学员授予相应等级的《职…...

十四、使用 Vue Router 开发单页应用(1)

本章概要 感受前端路由 HTML 使用路由模块开发使用路由 传统的 Web 应用程序不同页面间的跳转都是向服务器发起请求&#xff0c;服务器处理请求后向浏览器推送页面。 在单页应用程序中&#xff0c;不同视图&#xff08;组件的模板&#xff09;的内容都是在同一个页面中渲染&…...

广州python培训比较好的机构

软件开发这样的高薪职业是大家所向往的&#xff0c;有不少想学习软件开发的朋友都会选择参加专业的培训&#xff0c;但是面临众多的培训机构&#xff0c;大家也很发愁&#xff0c;不知道怎么选择好&#xff0c;毕竟市面上的培训机构太多&#xff0c;有个别的机构还是比较坑的。…...

教育部正式批准筹备设立香港科技大学(广州)

教育部批准设立香港科技大学&#xff08;广州&#xff09;。9月26日上午&#xff0c;广州南沙粤港澳全面合作示范区重点项目建设动员会举行&#xff0c;香港科技大学&#xff08;广州&#xff09;和广州南沙科学城核心区——中科院明珠科学园两个项目正式动工。教育部有关负责人…...

js通过URL下载文件

通过URL下载文件分为两种&#xff1a; 1.doc&#xff0c;docx文件 2.非doc、docx文件 第一种&#xff1a;doc、docx文件下载的函数 /*** url 下载文件路径* fileName 自定义文件名称* target 文件在何处被下载*/export function downloadByLink({url, fileName, target}: a…...

使用Maven下载jar包源码和doc文档

Maven命令行位置 两个命令 ① 下载pom.xml文件中依赖的jar包源码 mvn dependency:sources② 下载pom.xml文件中jar包文档 mvn dependency:resolve -Dclassifierjavadoc...

C语言笔记-18-Linux基础-进程

C语言笔记-18-Linux基础-进程 文章目录C语言笔记-18-Linux基础-进程前言一、进程概括二、进程指令三、进程函数fork 新建子进程return/exit 关闭子进程atexit 遗言函数四、wait 进程资源回收waitwaitpid五、exec家族函数 进程映像的更新六、Linux ELF 可执行文件readelf 查看el…...

html 转doc文档

html转doc的场景可能比较少见&#xff0c;但近期就遇到了一个&#xff0c;例如一份合同&#xff0c;需要后台不定期修改编辑&#xff0c;保存后&#xff0c;前端可直接下载doc。如果一份内容需要编辑&#xff0c;我能想到的就只有利用在线编辑器直接编辑html内容了&#xff0c;…...

java实现导出doc文档

之前只接触过导出excel&#xff0c;当然项目中总会有一些特殊要求&#xff0c;比如这次甲方爸爸要求导出word文档&#xff0c;代码来了。 项目使用的是pom进行管理的&#xff0c;dependency包括下面几个 <!-- doc --><dependency><groupId>com.lowagie<…...

os安装镜像下载路径(阿里云)

os安装镜像下载路径&#xff08;阿里云&#xff09; https://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/...

阿里云操作系统镜像地址

阿里巴巴开源镜像地址&#xff0c;包括centos、ubuntu、redhat等linux操作系统的镜像 还有k8s&#xff0c;docker等 https://opsx.alibaba.com/mirror centOS7地址 http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso...

Linux附记:Centos 8 更改YUM源(BaseOS)为阿里云

在yum install nmap的时候下载速度才7K/s&#xff0c;所以想着把Yum源改成国内的吧。 看了很多文章&#xff0c;yum.repos.d文件夹内的BaseOS.repo文件名和我这个不一致&#xff0c;所幸自己记录下吧 1、进入yum目录 cd /etc/yum.repos.d 2、备份当前yum源 cp CentOS-Linux-…...

docker安装-环境阿里OS7安装

docker安装-环境阿里OS7安装 官网地址 第一步 curl -fsSL https://get.docker.com -o get-docker.sh第二步 sh get-docker.sh第三步-- 开启docker systemctl start docker第四步–查看docker版本 docker version欧克...

鸿蒙系统跟阿里os,同是国产系统,为什么华为鸿蒙被夸阿里os无人问津,李楠说出真相...

近日华为召开了2019年开发者大会&#xff0c;在大会上正式发布了鸿蒙操作系统&#xff0c;并且明确表示&#xff0c;华为鸿蒙系统将支持手机领域。并且该系统是开放式系统&#xff0c;也就是说未来国产手机都能搭载鸿蒙系统&#xff0c;对此大家也是很期待。与此同时&#xff0…...

Python源码剖析2-字符串对象PyStringObject

二、 1、PyStringObject与 PyString_Type PyStringObject是变长对象中的不可变对象。当创建了一个PyStringObject对象之后,该对象内部维护的字符串就不能再被改变了。这一点特性使得 PyStringObject 对象能作为 PyDictObject 的键值,但同时也使得一些字符串操作的效率大大降低…...

阿里云 centeros7.4 配置ftp

安装vstfp 配置 /etc/vsftpd/vsftpd.conf 主要配置如下 listen_port21 pam_service_namevsftpd userlist_enableYES tcp_wrappersYES pasv_enableYES pasv_min_port30000 pasv_max_port30100 virtual_use_local_privsYES 注意ip6listen 和 listen 只能一个为true 添加用户\设置…...

center os 7配置阿里云的yum源

center os 7配置阿里云的yum源1&#xff09;下载repo文件2&#xff09;备份并替换系统的repo文件3&#xff09;执行yum源更新命令4&#xff09;过程报错1&#xff09;下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2&#xff09;备份并替换系统的repo文件 c…...

阿里云服务器配置(center os https)

关于阿里云服务器配置过程中各种问题的记录&#xff1a; 2018/6/18 买了阿里云ces服务器&#xff0c;服务器配置&#xff1a;1 vCPU 1 GB 40g硬盘&#xff0c;center os 6.8 32位&#xff0c; 按流量计费&#xff0c;买了5年费用852元&#xff08;不包括流量费用&#xff09;。…...

若依框架部署到阿里云服务器

大家好啊&#xff0c;初次接触若依框架&#xff0c;经过几天的学习&#xff0c;也是成功的把若依部署到了阿里云服务器上&#xff0c;写这篇文章也是希望对刚刚接触学习有点帮助。废话少说了&#xff0c;下面直接开始正题。 想部署到阿里云服务器&#xff0c;首先得去申请一个…...

阿里云服务器镜像Anolis OS 8.2 RHCK 64位操作系统说明

阿里云服务器Linux系统可选Anolis OS镜像&#xff0c;Anolis OS 8.2 RHCK 64位操作系统&#xff0c;Anolis是CentOS 8的替代版本&#xff0c;是由龙蜥社区OpenAnolis推出的开源发行版本&#xff0c;Anolis OS具有企业级的稳定性、高性能、安全性和可靠性。Linux百科来详细说下A…...