当前位置: 首页 > news >正文

青岛做网站皆赴青岛博百度服务中心人工24小时电话

青岛做网站皆赴青岛博,百度服务中心人工24小时电话,销售型网站有哪些,seo网站建设背景 有的时候我们做框架升级或改造的时候,需要用到原来的部分表,比如只是用ruoyi的框架,然后登录的用户逻辑还是想用自己的表,那么接下来这边文章将介绍修改逻辑。 修改教程 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返回自己的表的用户对象。// 如果这里不处理其余的逻辑就不需要修改,因为我这里要手动写入自己的日志Map<String, 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 Map<String, 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());Map<String, 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 LambdaQueryWrapper<BladeUserV2DO>().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, Set<String> 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、完结

http://www.zhongyajixie.com/news/62148.html

相关文章:

  • 软件制作器手机版下载长清区seo网络优化软件
  • 固原市住房和城乡建设局网站全网营销课程
  • 旅游网站前端模板简单的个人主页网站制作
  • 怎样看一个网站的信息吗设计网络营销方案
  • 歪咪小麻花官方网站怎么做零售西安百度推广代理商
  • 网站是怎么做的吗新闻10 30字
  • 样本之家登录网站广西疫情最新消息
  • 营销型网站建设策划2022年大事热点新闻
  • 国外平面设计网站大全网站制作维护
  • 怎么判断公司是不是外包网站优化的方法
  • wordpress搜索结果页样式优化网站找哪家
  • 毕业设计网站最容易做什莫类型58百度搜索引擎
  • vps云服务器网站优化怎么做
  • 做ppt模仿网站长尾关键词挖掘精灵官网
  • 松江做网站需要多少钱百度24小时客服电话136
  • 武汉做网站冰洁佛山网站营销推广
  • 百度网址大全址大全关键词诊断优化全部关键词
  • 公司做的网站打开慢谷歌seo网站推广怎么做
  • 美国一级a做爰片免费网站 视频教程沧州网站运营公司
  • 济南开发网站百度刷搜索词
  • 长沙新媒体运营公司桂林seo
  • 郑州网站的优化聊城优化seo
  • 好用的微信公众号编辑器seo怎么推排名
  • 注册科技有限公司可以做网站吗免费推广网站有哪些
  • 建设手机网站报价搜外网 seo教程
  • 免费建.com的网站迅速上排名网站优化
  • 徐州商城建站系统推广服务公司
  • 安塞网站建设seo泛目录培训
  • 济宁做网站2023年第三波疫情9月
  • 济南做网站比较好的公司有哪些百度联盟app