若依框架(SpringSecurity)登录接口改造_authentication usernamepasswordauthenticationtoken

最近刚刚上手若依框架,并且要对若依的登录模块进行改造。用过若依框架的不难发现,若依框架在下载时就已经集成了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年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-RIqOpIZc-1712647273818)]

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于Spring Security配置不正确引起的。要解决这个问题,你可以按照以下步骤进行操作: 1. 确保你的Spring Security配置文件正确。检查是否正确引入了Spring Security依赖,并在配置文件中配置了正确的命名空间和schema。 2. 确保在配置文件中添加了AuthenticationProvider的Bean定义。你可以使用`DaoAuthenticationProvider`作为默认的AuthenticationProvider。示例配置如下: ```xml <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager"> <property name="providers"> <list> <ref bean="daoAuthenticationProvider"/> </list> </property> </bean> <bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="yourUserDetailsService"/> <!-- 如果需要密码加密,则需配置密码加密器 --> <property name="passwordEncoder" ref="yourPasswordEncoder"/> </bean> <bean id="yourUserDetailsService" class="com.example.YourUserDetailsService"/> <bean id="yourPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/> ``` 3. 确保你的自定义UserDetailsService实现了`org.springframework.security.core.userdetails.UserDetailsService`接口,并正确实现了`loadUserByUsername`方法。 通过检查以上步骤,你应该能够解决这个错误并成功进行身份验证。如果问题仍然存在,请提供更多的相关代码和配置信息,以便更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值