若依(spring-cloud)修改登陆密码加密算法

文章目录

  • 前言
  • 一、解决办法
  • 二、解决过程
    • 1 为啥要改加密算法
    • 2 找不到校验代码
  • 总结


前言

若依是一套快速集成各种中间件的配套 Java 后端框架,本文旨在描述修改其登陆的加密算法。文章的大前提是后端框架是若依哈,不是的话可以跳过了~!

文章创作原因:系统针对登陆密码是密文存储,而在登陆时的校验规则却在登录方法没找到这块的代码,导致一开始修改时摸不着头。


提示:以下是本篇文章正文内容,下面案例可供参考

一、解决办法

先说解决办法,在 SecurityConfig 这个文件中将原有的加密算法的 bean 注释掉,然后创建自己的加密算法的 bean 就行,再将 authenticationProvider 方法设置密码加密的bean对象改成自己定义的方法即可。

   /*** 强散列哈希加密实现*//*@Beanpublic BCryptPasswordEncoder bCryptPasswordEncoder() {return new BCryptPasswordEncoder();}*//*** 自定义加密算法* */@Beanpublic TestPasswordEncoder testPasswordEncoder() {return new TestPasswordEncoder();}/*** 身份认证接口*/@Beanpublic DaoAuthenticationProvider authenticationProvider() {DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();authProvider.setUserDetailsService(userDetailsService);authProvider.setPasswordEncoder(testPasswordEncoder());return authProvider;}

自定义的加密类需要实现org.springframework.security.crypto.password.PasswordEncoder,然后重写两个方法即可。

package com.demo.utils;import org.springframework.security.crypto.password.PasswordEncoder;public class TestPasswordEncoder implements PasswordEncoder {@Overridepublic String encode(CharSequence rawPassword) {return "";}@Overridepublic boolean matches(CharSequence rawPassword, String encodedPassword) {return false;}
}

顺便说明下,encode 方法是将参数加密成密文,matches 方法的第一个参数是未加密的参数,第二个参数是密文,不难理解方法的逻辑是将第一个参数在加密过后,与第二个参数进行比较,根据结果返回一个boolean。

当然,改完这个就完事了吗??No_No_No~

注意事项:
1 在修改密码的方法中,需要同步加密新密码,再入库保存;
2 新增用户时需要针对配置的默认密码也进行进行加密,,再入库保存;
3 如果有文件导入的方法创建用户,那么也需要针对密码进行加密;
4 建议对原来的加密类,再查询下是否有其他地方在引用,根据代码判断是否也需要修改;

后面是作者对整个过程的梳理,如果仅是修改加密算法,那么看到这里就可以了,如果能帮到大家,还需要大家的点赞收藏支持,这个真的很重要~~

二、解决过程

1 为啥要改加密算法

这个其实不难理解,因为甲方是一家 bank 公司,对加密有着严格要求,只是当我将这块都写完了才意识到一个问题,密文存储密码导致密码在数据库的字符串看起来就像是乱码一样,那他怎么知道我是否用了规定的加密算法呢?哈哈~开句玩笑,但是我确实不清楚甲方如何去验证这个。

2 找不到校验代码

这部分描述会附上代码,因为这块代码是若依框架自带的,所以不同的项目关于登录的代码几乎一样。

如前言所述,系统原来的校验逻辑是看不到的,只有一行代码

	// 该方法会去调用UserDetailsServiceImpl.loadUserByUsernameauthentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));

这行代码会校验密码,但是点进这个 authenticate 方法内部,发现这个方法本身是个接口,有多个实现

	Authentication authenticate(Authentication authentication) throws AuthenticationException;

而这个方法内部的 new UsernamePasswordAuthenticationToken(username, password) 对应的构造函数也看不出校验逻辑

	public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {super(null);this.principal = principal;this.credentials = credentials;setAuthenticated(false);}

然后我也看了注释中提到的方法,发现也没有关于密码校验的逻辑

  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {SysUser user = userService.selectUserByUserName(username);if (StringUtils.isNull(user)) {log.info("登录用户:{} 不存在.", username);throw new ServiceException("账号或密码错误");} else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {log.info("登录用户:{} 已被删除.", username);throw new ServiceException("账号或密码错误");} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {log.info("登录用户:{} 已被停用.", username);throw new ServiceException("对不起,您的账号:" + username + " 已停用");}return createLoginUser(user);}public UserDetails createLoginUser(SysUser user) {return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));}

所以单从代码去追溯源码,比较困难;正向解决不了问题,只能问百度了,在看了十几篇文章后发现,在系统 SecurityConfig 文件中,有关于加密算法对象的 bean,然后就自然而然的想把这个算法替换成自己的加密算法,然后就ok了。

总结

没什么好总结的,这是框架将密码校验的部分封装了,所以必需要一层层看源码才能直接解决问题,作者这属于走捷径,不推荐哈

如果文章正真的帮到你,或者让你知道了新知识,还希望大家多多~~~~~~~~~~~~~~点赞收藏!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再见2024,你好2025

再见2024,你好2025 1月2月3月4月5~10月11~12月一些收获读书跑步工作 为了让这篇博客不那么平淡,一句话可以总结为:平平无奇的琐碎,没有亮点成果。 也可以数字化概述:涨了1万粉,赚了10万,跑步300…

阴阳师の新手如何速刷5个SP/SSR?!(急速育成)

目标:攒5个SP/SSR式神,参与急速育成,省四个黑蛋(想要快速升级技能而且经常上场的式神在攒够5个式神前先不升级)【理论上组成:10蓝40蓝预约召唤福利20修行or抽卡】 关键点:蓝票,新手…

Kerberos用户认证-数据安全-简单了解-230403

hadoop安全模式官方文档:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html kerberos是什么 kerberos是计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。 概念&#…

第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述

前言 本文介绍了 ES 使用的网络模型,并介绍 transport,http 接收、响应请求的代码入口。 网络 IO 模型 Node 在初始化的时候,会创建网络模块。网络模块会加载 Netty4Plugin plugin。 而后由 Netty4Plugin 创建对应的 transports&#xff0…

SQL 基础教程 - SQL SELECT 语句

SQL SELECT DISTINCT 语句 SELECT DISTINCT 语句用于返回唯一不同的值。 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。 DISTINCT 关键词用于返回唯一不同的值。 SQL SELECT DISTINCT 语法 …

计算机网络基础知识(7)中科大郑铨老师笔记

协议层次及服务模型 计算机网络的分层设计方法,将复杂的网络功能分解为多个层次,每一层实现特定的功能。 互联网中的TCP/IP协议族,包括物理层、链 路层、网络层、传输层和应用层的功能。然后,数据传输的 过程,从应用层…

Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)

背景 随笔。Microsoft word 2013基础使用,仅做参考和积累。 问题 Microsoft word 2013,对段落标题文字应用【标题样式】不生效(主要表现为在导航窗格不显示)。 图1 图2 观察图1和图2,发现图1的文字在应用【标题一】样…

TP 钱包插件版本的使用

目前 TokenPocket 的几个平台中,以 ios 和 安卓版本最为常见,其实很少有人知道,浏览器上有一个插件版本的 Tp, 用电脑多的话,这也是一个挺好的选择。 最新版本现在支持Chrome、Brave 浏览器、Edge(Firefox及Opera正在…

微信流量主挑战:三天25用户!功能未完善?(新纪元4)

🎉【小程序上线第三天!突破25用户大关!】🎉 嘿,大家好!今天是我们小程序上线的第三天,我们的用户量已经突破了25个!昨天还是16个,今天一觉醒来竟然有25个!这涨…

【AndroidAPP】权限被拒绝:[android.permission.READ_EXTERNAL_STORAGE],USB设备访问权限系统报错

一、问题原因 1.安卓安全性变更 Android 12 的安全性变更,Google 引入了更严格的 PendingIntent 安全管理,强制要求开发者明确指定 PendingIntent 的可变性(Mutable)或不可变性(Immutable)。 但是&#xf…

打印进度条

文章目录 1.Python语言实现(1)黑白色(2)彩色:蓝色 2.C语言实现(1)黑白颜色(2)彩色版:红绿色 1.Python语言实现 (1)黑白色 import sys import timedef progress_bar(percentage, width50):"""打印进度条:param percentage: 当前进度百分比…

ubuntu 使用samba与windows共享文件[注意权限配置]

在Ubuntu上使用Samba服务与Windows系统共享文件,需要正确配置Samba服务以及相应的权限。以下是详细的步骤: 安装Samba 首先,确保你的Ubuntu系统上安装了Samba服务。 sudo apt update sudo apt install samba配置Samba 安装完成后&#xff0c…

数据结构(哈希表)

背景 在对数据的日常处理中,查找是一项基本操作。通常,查找算法都是基于对比的,比如在一条链表中有n个节点,要找到其中的某个节点,最基本的思路就是从头到尾依次遍历每个节点,依次对比每个节点是否是想要的…

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络? 模拟器使用的是电脑本身的网络,不通过代理即可访问网络。 2、创建子window后,锁屏很短时间内,应用会被杀死? 没开长时任务,锁屏和退后台保活要开长时任务。 应用退至后台后&…

如何解决Eigen和CUDA版本不匹配引起的错误math_functions.hpp: No such file or directory

Apollo9针对RTX40的docker环境里的Eigen库版本是3.3.4,CUDA是11.8: 编译我们自己封装模型的某些component代码时没问题,编译一个封装occ模型的component代码时始终报错: In file included from /usr/include/eigen3/Eigen/Geometry:11:0, …

Mac连接云服务器工具推荐

文章目录 前言步骤1. 下载2. 安装3. 常用插件安装4. 连接ssh测试5. 连接sftp测试注意:ssh和sftp的区别注意:不同文件传输的区别解决SSL自动退出 前言 Royal TSX是什么: Royal TSX 是一款跨平台的远程桌面和连接管理工具,专为 mac…

python修改ppt中的文字部分及插入图片

批量修改ppt中的某个模块,或者批量制作奖状等场景会用到; import os import pandas as pd from pptx import Presentation from pptx.util import Inchesfilepath/Users/kangyongqing/Documents/kangyq/202303/分析模版/批量制作/file1时段预警_副本.pp…

从0到机器视觉工程师(一):机器视觉工业相机总结

目录 相机的作用 工业相机 工业相机的优点 工业相机的种类 工业相机知名品牌 光源与打光 打光方式 亮暗场照明 亮暗场照明的应用 亮暗场照明的区别 前向光漫射照明 背光照明 背光照明的原理 背光照明的应用 同轴光照明 同轴光照明的应用 总结 相机的作用 相机…

gesp(C++一级)(7)洛谷:B3863:[GESP202309 一级] 小明的幸运数

gesp(C一级)(7)洛谷:B3863:[GESP202309 一级] 小明的幸运数 题目描述 所有个位数为 k k k 的正整数,以及所有 k k k 的倍数,都被小明称为“ k k k 幸运数”。小明想知道正整数 L L L 和 R R R 之间&a…

风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注 数据集下载 yolov11: https://download.csdn.net/download/pbymw8iwm/90206849 yolov…