安全登录--Springboot使用Rsa加密及Ldap源进行登录认证

1、场景介绍

​ 注册登录一直都是工程师做系统的必经之路,毕竟这个功能相对与业务较复杂的代码来说是比较简单的。当然,最简单的事情往往最容易出错,最为普通的注册登录就是将用户名及密码存入数据库,在用户登录时,将两者进行比对来校验是否登录成功。但是,这种操作在实际项目中往往不太实用,因为我们需要考虑到安全问题。举个简单的例子,使用上述方法,如果某天数据库数据泄露,用户名及密码被别有用心的人获取,那他们就可用使用获取的到信息随意登录,造成的危害可想而知。所以我们往往是需要将用户密码进行加密,最常见的MD5、SM3、SHA-256等这类散列函数的加密及加盐加密,这类为散列函数加密方式,还有对称和非对称加密方式,以及不将用户名和密码存储到数据库的加密方式:Ad域认证(类似证书的目录层级:国、省、市、公司、部门、人)。

​ 此篇文档则会介绍非对称加密及Ad域认证两种登录方式。

2、使用的技术介绍

​ 技术的详细介绍本文不做过多理论上的介绍,感兴趣的同学可用自行查看,以下只说与本文相关的部分概念,加粗部分为核心!

非对称加密: 非对称加密是由一组非对称密钥对,通过公钥加密,私钥解密或私钥加密,公钥解密的方式进行的一种双向加密方式,所谓双向加密即为可将明文加密为密文,也可以将密文解密为明文。如果使用Hash函数(散列函数)的方式,则无法将密文解密为明文,称为单向加密。

Ad域及Ldap: Active Directory(AD)域认证和LDAP(Lightweight Directory Access Protocol)是密切相关的概念,AD 是一种目录服务,而LDAP 是一种协议。AD 使用 LDAP 作为其访问和查询目录数据的协议。这意味着可以使用LDAP协议来与AD通信,以执行身份验证、检索用户信息、更新用户属性等操作。总之,AD是一种目录服务,而LDAP是一种协议,用于与目录服务进行通信。在Windows环境中,AD通常是目录服务的实现,而LDAP是用于访问和操作AD数据的主要协议之一。

3、开始操作(上代码!!)
准备环境:

​ 1、准备一个Springboot项目,简单写一个注册登录的接口:

目录层级:

在这里插入图片描述

controller层:
在这里插入图片描述

service层:

在这里插入图片描述

2、postman测试接口:

添加用户:

在这里插入图片描述

用户登录:
在这里插入图片描述

非对称加密方式:

注:非对称加密方式是修改了校验密码是否正确的方式

​ 1、获取一组密钥对,拆解出公钥和私钥,获得的这对密钥要保存好,后续要用

在这里插入图片描述

​ 2、改造登录鉴权时的代码(RsaUtil是我自己封装的一个rsa加解密的工具类)

在这里插入图片描述

Ldap方式(Springboot集成):

​ 1、准备一个Ldap服务端,关于Ldap的服务器如何部署,同学们自行搜索下

​ 2、在ldap中创建用于测试的用户

​ 3、导入依赖

<!--ldap依赖,版本建议和boot版本一致-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-ldap</artifactId>
    <version>2.7.13</version>
</dependency>

​ 4、使用官方提供的客户端LdapTemplate编写鉴权代码

在这里插入图片描述

优化代码结构:

1、封装统一的鉴权入口

在这里插入图片描述

2、定义接口

在这里插入图片描述

3、定义父类

在这里插入图片描述

4、子类继承父类,实现两个方法即可

在这里插入图片描述

调用者可根据配置指定使用某一个鉴权方式或将所有鉴权都进行一遍

在这里插入图片描述

4、注意事项

​ 非对称算法有很多种,我只是拿出一种做示例;以及后续的代码结构优化,是后期加上的,使用的是类似适配器模式+策略模式的结构,这样可扩展性会高很多;代码已push至Git仓库:https://gitee.com/xiaokuncom/devin-blog/tree/develop/secureLogin

5、鸡汤送上

进退两难的年纪皆是生活,让你变好的过程从来都不会很舒服!


最后说明

​ 创作不易,若转载请标明出处或原文链接!!!

​ 感觉写的还行的,帮忙点赞评论哦!!!

​ 有问题的地方,希望帮忙指出!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Boot使用RSA加密的步骤如下: 1. 首先,生成私钥和公钥。可以使用Java内置的KeyPairGenerator类来生成RSA密钥对,分别得到私钥和公钥。 2. 将生成的密钥放到application.properties文件中,可以使用spring-boot-starter-security等相关框架来管理密钥。 3. 前端发送请求时,向后端请求公钥。后端会随机获取公钥并将其返回给前端。 4. 前端使用的jsencrypt.js库来对需要加密的数据(例如密码)进行加密加密完成后,将加密后的数据传输到后端。 5. 后端接收到加密的数据后,使用私钥进行解密操作。 所以,使用RSA加密Spring Boot中的步骤主要包括生成密钥、传输公钥至前端、前端加密数据传输至后端、后端使用私钥解密。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Springboot项目报文加密(采用AES、RSA动态加密策略)](https://download.csdn.net/download/qq_38254635/87620796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Spring-boot如何使用RSA加密](https://blog.csdn.net/qq_39150049/article/details/109191120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SpringBoot通过RSA实现用户名和密码的加密和解密](https://blog.csdn.net/qq_36735969/article/details/124842616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值