Spring Data JPA 数据加密存储

        数据安全永远是个大问题。用户数据存储到数据库中,如果不采取加密手段,那么只要有权限访问数据库的人,都能直接明了的看到用户所有的隐私数据,尤其在中小型公司中,对于数据库权限的管理基本上都是由开发人员直接进行维护管理,这样对于数据安全并不是一个好事,因此如果能将用户私密数据加密存储到数据库中,那么就能稍微提升一些数据安全性。本文讨论的是在 Spring Data JPA 中使用 AES 加解密来存储用户隐私数据,使用的数据库是 mysql。

        首先,mysql 提供直接的加解密函数 aes_encrypt() 和 aes_decrypt() ,我们就是直接使用这两个函数。方法比较简单,在需要加解密的字段上,使用 @ColumnTransformer 注解,来调用 aes_encrypt() 和 aes_decrypt() 函数。但需要注意的是,aes_encrypt() 加密之后是二进制数据,因此数据库字段类型需要使用 blob,如果你的应用是全新开发的,那么问题不大, 但是如果需要在已有的项目中加上数据加密特性,那么你需要修改现有数据库的库表结构,这样代价就比较大了,因此我们可以使用 mysql 的 hex() 函数,将这个二进制的数据,转换为十六进制字符串存储入数据库中。同理,读取时先用 unhex() 函数将十六进制字符串重新转换为二进制数据,再进行解密操作得到最终结果。

    @Column(name = "user_name")
    @ColumnTransformer(  
            read = "AES_DECRYPT(UNHEX(user_name), 'ankon')",
            write = "HEX(AES_ENCRYPT(?, 'ankon'))"
    )
    private String userName;

        上述方式解决了我们的基本问题,那么,中文呢?经测试,这种方式解析中文完全不OK,因此我们还需要加点料:

    @Column(name = "user_name")
    @ColumnTransformer(  
            read = "CAST(AES_DECRYPT(UNHEX(user_name), 'ankon') as char(128))",
            write = "HEX(AES_ENCRYPT(?, 'ankon'))"
    )
    private String userName;

        使用 cast ,将解析结果强制转换成字符格式。

        愿意猜想:因为没有去查看源码(找起来实在是太麻烦了),所以就猜测下:当我们不使用 cast 时,JPA 从 mysql 获取到的 userName 是一个解密后的二进制数据,但是那个字段本身声明为 String, 那么它应该有默认的转换方法将 byte[] 转换为 String,毕竟是老外写的,那么应该不会去考虑多种乱七八糟的字符编码,毕竟他们用 ISO-8859-1 就够了,所以你看到的结果就是中文乱码,英文OK。加上 cast 之后,在 mysql 层面将结果处理为字符串格式,mysql 的字符编码格式为 utf-8 的话,那么就跟代码层面需要的字符编码格式一致了,因此就正常解析出来了。

 

 

 

 

 

 

基于Spring Boot 2.0、Spring Data JPA、Thymeleaf和Shiro开发的后台管理系统可以实现一个功能强大且易于维护的应用程序。 这套技术栈的优势包括: 1. Spring Boot 2.0:它是一个快速构建应用程序的框架,提供自动化配置和减少样板代码的优势,使开发变得更加高效。 2. Spring Data JPA:它是一个基于JPA的持久化框架,通过简化数据库操作和提供对各种数据库的支持,大大减少了开发人员的工作量。 3. Thymeleaf:它是一个服务器端的Java模板引擎,可以直接处理HTML、XML、JavaScript、CSS和文本等内容。它具有易于学习和使用的特点,并且能够与Spring Boot实现良好的集成。 4. Shiro:它是一个功能强大且灵活的Java安全框架,可以提供认证、授权、加密和会话管理等功能。通过集成Shiro,我们可以轻松实现后台管理系统的用户认证和访问控制等安全需求。 基于这套技术栈,我们可以开发一个后台管理系统,实现用户登录、权限管理、菜单管理、角色管理、用户管理等功能。利用Spring Boot的自动化配置和快速启动特性,我们可以快速搭建项目的骨架,并集成Spring Data JPA实现数据访问,利用Thymeleaf开发可复用的页面组件,通过Shiro实现用户认证和授权。 总之,基于Spring Boot 2.0、Spring Data JPA、Thymeleaf和Shiro的后台管理系统,不仅可以极大地提高开发效率,还能够提供丰富的功能和安全性,帮助我们快速构建高质量的应用程序。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值