食品商务网-网站建设,网站建设教的误区,海南省城乡住房建设厅网站,wordpress用户邮件营销插件背景
有的时候我们做框架升级或改造的时候#xff0c;需要用到原来的部分表#xff0c;比如只是用ruoyi的框架#xff0c;然后登录的用户逻辑还是想用自己的表#xff0c;那么接下来这边文章将介绍修改逻辑。
修改教程
1、SysLoginController.java
大家找到这个login方…背景
有的时候我们做框架升级或改造的时候需要用到原来的部分表比如只是用ruoyi的框架然后登录的用户逻辑还是想用自己的表那么接下来这边文章将介绍修改逻辑。
修改教程
1、SysLoginController.java
大家找到这个login方法这是controller的入口。
/*** 登录方法* * param loginBody 登录信息* return 结果*/PostMapping(/login)public AjaxResult login(RequestBody LoginBody loginBody){// 退出接口查看LogoutSuccessHandlerImpl.onLogoutSuccessAjaxResult ajax AjaxResult.success();// 生成令牌修改这个map返回自己的表的用户对象。// 如果这里不处理其余的逻辑就不需要修改因为我这里要手动写入自己的日志MapString, Object map loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),loginBody.getUuid());LoginUser loginUser (LoginUser)map.get(loginUser);loginUser.setLanguage(loginBody.getLanguage());bsOperateLogV2Service.createLoginLog(String.valueOf(loginUser.getUserId()),loginUser.getUsername(),1,String.valueOf(loginUser.getDeptId()));ajax.put(Constants.TOKEN, map.get(token));return ajax;}
2、SysLoginService.java
这里有一些验证比如验证码用户是否存在等大家点击进入到loginPreCheck方法中把查询用户修改为自己的表查询然后把没有用的逻辑注释掉。
/*** 登录验证* * param username 用户名* param password 密码* param code 验证码* param uuid 唯一标识* return 结果*/public MapString, Object login(String username, String password, String code, String uuid){// 验证码校验validateCaptcha(username, code, uuid);// 登录前置校验loginPreCheck(username, password);// 用户验证Authentication authentication null;try{UsernamePasswordAuthenticationToken authenticationToken new UsernamePasswordAuthenticationToken(username, password);AuthenticationContextHolder.setContext(authenticationToken);// 该方法会去调用UserDetailsServiceImpl.loadUserByUsernameauthentication authenticationManager.authenticate(authenticationToken);}catch (Exception e){if (e instanceof BadCredentialsException){//AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message(user.password.not.match)));throw new UserPasswordNotMatchException();}else{//AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));throw new ServiceException(e.getMessage());}}finally{AuthenticationContextHolder.clearContext();}//AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message(user.login.success)));LoginUser loginUser (LoginUser) authentication.getPrincipal();//recordLoginInfo(loginUser.getUserId());MapString, Object map new HashMap();map.put(token,tokenService.createToken(loginUser));map.put(loginUser,loginUser);// 生成tokenreturn map;}/*** 登录前置校验* param username 用户名* param password 用户密码*/public void loginPreCheck(String username, String password){// 用户名或密码为空 错误if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)){AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message(not.null)));throw new UserNotExistsException();}// 密码如果不在指定范围内 错误
// if (password.length() UserConstants.PASSWORD_MIN_LENGTH
// || password.length() UserConstants.PASSWORD_MAX_LENGTH)
// {
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message(user.password.not.match)));
// throw new UserPasswordNotMatchException();
// }
// // 用户名不在指定范围内 错误
// if (username.length() UserConstants.USERNAME_MIN_LENGTH
// || username.length() UserConstants.USERNAME_MAX_LENGTH)
// {
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message(user.password.not.match)));
// throw new UserPasswordNotMatchException();
// }
// // IP黑名单校验
// String blackStr configService.selectConfigByKey(sys.login.blackIPList);
// if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
// {
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message(login.blocked)));
// throw new BlackListException();
// }}
3、loadUserByUsername方法
大家找到UserDetailsServiceImpl.loadUserByUsername方法这是核心。
Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{Authentication usernamePasswordAuthenticationToken AuthenticationContextHolder.getContext();
// 这是自己的页面输入的密码没有加密比如123456String inputPassword usernamePasswordAuthenticationToken.getCredentials().toString();// 这里是自定义的表查询用户和密码验证如果还有其他的验证都可以在这里进行添加LambdaQueryWrapper wrapper new LambdaQueryWrapperBladeUserV2DO().eq(BladeUserV2DO::getAccount,username)//PasswordUtil是自己的加密工具你用什么加密就保持原来的就行.eq(BladeUserV2DO::getPassword, PasswordUtil.encrypt(inputPassword)).eq(BladeUserV2DO::getIsDeleted,0);// 这里写自己的登录验证逻辑BladeUserV2DO bladeUserV2DO bladeUserV2Mapper.selectOne(wrapper);
// SysUser user userService.selectUserByUserName(username);if (StringUtils.isNull(bladeUserV2DO)){log.info(登录用户{} 不存在., username);throw new UserPasswordNotMatchException();}BCryptPasswordEncoder passwordEncoder new BCryptPasswordEncoder();// 这里一定要把加密后的密码放进去后面的验证中会一直用这个密码// 这个是123456加密后的密码这里给框架都是完全通过的密码// 因为我们在方法开始的时候自己进行密码验证能走到这里都是验证通过的bladeUserV2DO.setPassword(passwordEncoder.encode(inputPassword));passwordService.validate(bladeUserV2DO);return createLoginUser(bladeUserV2DO);}public UserDetails createLoginUser(BladeUserV2DO bladeUserV2DO){BladeUserRespVo bladeUserRespVo bladeUserV2Mapper.getBladeUserInfo(bladeUserV2DO.getId());SysUser user new SysUser();user.setUserId(bladeUserV2DO.getId());user.setDeptId(0L);if(StringUtils.isNotEmpty(bladeUserV2DO.getDeptId())){user.setDeptId(Long.parseLong(bladeUserV2DO.getDeptId()));}user.setEmail(bladeUserV2DO.getEmail());user.setDelFlag(0);user.setNickName(bladeUserV2DO.getRealName());user.setUserName(bladeUserV2DO.getAccount());user.setPhonenumber(bladeUserV2DO.getPhone());user.setCreateTime(bladeUserV2DO.getCreateTime());user.setRoleId(0L);// 必须复制加密后的密码后续框架一直在验证// 上面已经把123456对应的加密字符串保存进来这里直接复制进去// 后续的框架一直在验证user.setPassword(bladeUserV2DO.getPassword());if(StringUtils.isNotEmpty(bladeUserV2DO.getRoleId())){user.setRoleId(Long.parseLong(bladeUserV2DO.getRoleId()));}user.setSex(bladeUserV2DO.getSex());// LoginUser直接修改代码把自己需要添加的字段都写进去生成对应的set和get方法就行return new LoginUser(user.getUserId(), user.getDeptId(),user, permissionService.getMenuPermission(user),bladeUserRespVo.getIsSuperAdmin(),bladeUserRespVo.getIsAdmin(),bladeUserV2DO.getAccount());}public LoginUser(Long userId, Long deptId, SysUser user, SetString permissions,int isSuperAdmin,int isAdmin, String account){this.userId userId;this.deptId deptId;this.user user;this.permissions permissions;//增加自己的字段this.isSuperAdmin isSuperAdmin;this.isAdmin isAdmin;this.account account;}
4、SysPasswordService.java
这里的validate方法中把没有用的逻辑注释掉。
/*** 登录账户密码错误次数缓存键名* * param username 用户名* return 缓存键key*/private String getCacheKey(String username){return CacheConstants.PWD_ERR_CNT_KEY username;}public void validate(BladeUserV2DO bladeUserV2DO){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);
// }if (!matches(bladeUserV2DO, password)){
// retryCount retryCount 1;
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
// MessageUtils.message(user.password.retry.limit.count, retryCount)));
// redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);throw new UserPasswordNotMatchException();}else{clearLoginRecordCache(username);}}
5、PasswordUtil.java
如果你用的md5加密就不需要我的这个工具类
package com.ruoyi.common.utils;import jodd.util.StringUtil;
import org.apache.commons.codec.Charsets;
import org.springframework.lang.Nullable;
import org.springframework.util.DigestUtils;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class PasswordUtil extends DigestUtils {private static final char[] HEX_CODE new char[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f};public PasswordUtil() {}public static String md5Hex(final String data) {return DigestUtils.md5DigestAsHex(data.getBytes(Charsets.UTF_8));}public static String md5Hex(final byte[] bytes) {return DigestUtils.md5DigestAsHex(bytes);}public static String sha1Hex(String data) {return sha1Hex(data.getBytes(Charsets.UTF_8));}public static String sha1Hex(final byte[] bytes) {return digestHex(SHA-1, bytes);}public static String sha224Hex(String data) {return sha224Hex(data.getBytes(Charsets.UTF_8));}public static String sha224Hex(final byte[] bytes) {return digestHex(SHA-224, bytes);}public static String sha256Hex(String data) {return sha256Hex(data.getBytes(Charsets.UTF_8));}public static String sha256Hex(final byte[] bytes) {return digestHex(SHA-256, bytes);}public static String sha384Hex(String data) {return sha384Hex(data.getBytes(Charsets.UTF_8));}public static String sha384Hex(final byte[] bytes) {return digestHex(SHA-384, bytes);}public static String sha512Hex(String data) {return sha512Hex(data.getBytes(Charsets.UTF_8));}public static String sha512Hex(final byte[] bytes) {return digestHex(SHA-512, bytes);}public static String digestHex(String algorithm, byte[] bytes) {try {MessageDigest md MessageDigest.getInstance(algorithm);return encodeHex(md.digest(bytes));} catch (NoSuchAlgorithmException var3) {var3.printStackTrace();}return null;}public static String hmacMd5Hex(String data, String key) {return hmacMd5Hex(data.getBytes(Charsets.UTF_8), key);}public static String hmacMd5Hex(final byte[] bytes, String key) {return digestHMacHex(HmacMD5, bytes, key);}public static String hmacSha1Hex(String data, String key) {return hmacSha1Hex(data.getBytes(Charsets.UTF_8), key);}public static String hmacSha1Hex(final byte[] bytes, String key) {return digestHMacHex(HmacSHA1, bytes, key);}public static String hmacSha224Hex(String data, String key) {return hmacSha224Hex(data.getBytes(Charsets.UTF_8), key);}public static String hmacSha224Hex(final byte[] bytes, String key) {return digestHMacHex(HmacSHA224, bytes, key);}public static byte[] hmacSha256(String data, String key) {return hmacSha256(data.getBytes(Charsets.UTF_8), key);}public static byte[] hmacSha256(final byte[] bytes, String key) {return digestHMac(HmacSHA256, bytes, key);}public static String hmacSha256Hex(String data, String key) {return hmacSha256Hex(data.getBytes(Charsets.UTF_8), key);}public static String hmacSha256Hex(final byte[] bytes, String key) {return digestHMacHex(HmacSHA256, bytes, key);}public static String hmacSha384Hex(String data, String key) {return hmacSha384Hex(data.getBytes(Charsets.UTF_8), key);}public static String hmacSha384Hex(final byte[] bytes, String key) {return digestHMacHex(HmacSHA384, bytes, key);}public static String hmacSha512Hex(String data, String key) {return hmacSha512Hex(data.getBytes(Charsets.UTF_8), key);}public static String hmacSha512Hex(final byte[] bytes, String key) {return digestHMacHex(HmacSHA512, bytes, key);}public static String digestHMacHex(String algorithm, final byte[] bytes, String key) {SecretKeySpec secretKey new SecretKeySpec(key.getBytes(Charsets.UTF_8), algorithm);try {Mac mac Mac.getInstance(secretKey.getAlgorithm());mac.init(secretKey);return encodeHex(mac.doFinal(bytes));} catch (InvalidKeyException | NoSuchAlgorithmException var5) {var5.printStackTrace();}return null;}public static byte[] digestHMac(String algorithm, final byte[] bytes, String key) {SecretKeySpec secretKey new SecretKeySpec(key.getBytes(Charsets.UTF_8), algorithm);try {Mac mac Mac.getInstance(secretKey.getAlgorithm());mac.init(secretKey);return mac.doFinal(bytes);} catch (InvalidKeyException | NoSuchAlgorithmException var5) {var5.printStackTrace();}return null;}public static String encodeHex(byte[] bytes) {StringBuilder r new StringBuilder(bytes.length * 2);byte[] var2 bytes;int var3 bytes.length;for(int var4 0; var4 var3; var4) {byte b var2[var4];r.append(HEX_CODE[b 4 15]);r.append(HEX_CODE[b 15]);}return r.toString();}public static boolean slowEquals(Nullable String a, Nullable String b) {return a ! null b ! null ? slowEquals(a.getBytes(Charsets.UTF_8), b.getBytes(Charsets.UTF_8)) : false;}public static boolean slowEquals(Nullable byte[] a, Nullable byte[] b) {if (a ! null b ! null) {if (a.length ! b.length) {return false;} else {int diff a.length ^ b.length;for(int i 0; i a.length; i) {diff | a[i] ^ b[i];}return diff 0;}} else {return false;}}public static String hex(String data) {return StringUtil.isBlank(data) ? : sha1Hex(data);}public static String encrypt(String data) {return StringUtil.isBlank(data) ? : sha1Hex(md5Hex(data));}
}6、完结