最近刚刚上手若依框架,并且要对若依的登录模块进行改造。用过若依框架的不难发现,若依框架在下载时就已经集成了SpringSecurity进行登录效验并连接了自带的sys_user表完成SpringSecurity的自定义登录效验。
二、目标功能
现在需要连接另一个数据库,并用这一张数据库里的用户表(账号/密码),进行登录的效验。要使用若依框架,并需要保留若依自带的部门、权限等等功能。
三、逻辑及代码实现
1. 连接另一数据库实现
连接数据库这里使用的是通过访问实现该数据库的后端接口程序接口进行实现。登录后,该后端接口程序会返回效验的结果,并返回需要的数据(这个根据你的具体需求定义)
一些无关代码目的贴合若依原有逻辑,原有的逻辑请看若依代码
这个类的位置是:
package com.ruoyi.framework.web.service.SysPasswordService
//普通登陆 调用用户中心的账号秘密效验进行效验
public SysUser userValidate() {
Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext();
String username = usernamePasswordAuthenticationToken.getName();
String password = usernamePasswordAuthenticationToken.getCredentials().toString();
//验证重试的次数(用于用户记录在错误日志里)
Integer retryCount = redisCache.getCacheObject(getCacheKey(username));
if (retryCount == null) {
retryCount = 0;
}
if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) {
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
MessageUtils.message(“user.password.retry.limit.exceed”, maxRetryCount, lockTime)));
throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime);
}
// 进行账号密码的比对
//使用restTemplate构造http post请求
RestTemplate restTemplate = new RestTemplate();
//post请求体需要 使用 MultiValueMap类型的对象作为参数
MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<>();
//构造请求体中的参数, 此处key 需要和调用接口的参数名对应
paramMap.add(“stuid”, username);
paramMap.add(“password”, password);
log.info(“username----------->{}”, username);
log.info(“password----------->{}”, password);
// 这下面就是要调用的登录效验接口
ResponseEntity response = restTemplate.postForEntity(Constants.USER_CENTER_LOGIN_URL, paramMap, AjaxResult.class);
/*
- 处理返回的数据
- (1 登录成功 得到返回的jwt
- (2 登录失败 返回失败
*/
AjaxResult result = (AjaxResult) response.getBody();
if (result == null) {
log.info(“用户中心返回为空”);
throw new UsernameNotFoundException(“用户中心返回为空”);
}
log.info(“-----------------------”);
Integer code = (Integer) result.get(AjaxResult.CODE_TAG);
log.info(“登录访问用户中心获得的响应状态码: " + code);
log.info(”----------------------");
if (code == 200) {
clearLoginRecordCache(username);
//得到响应体jwt中 学生信息
String token = (String) ((AjaxResult) response.getBody()).get(AjaxResult.DATA_TAG);
Map<String, Claim> jwt = JwtUtils.getClaims(token);
//取到 map中的学生学号 和 姓名
String stuId = jwt.get(“stuId”).asString();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-RIqOpIZc-1712647273818)]