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

食品商务网-网站建设网站建设教的误区

食品商务网-网站建设,网站建设教的误区,海南省城乡住房建设厅网站,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、完结
http://www.dnsts.com.cn/news/128092.html

相关文章:

  • 网站开发包括后台 前台百度视频
  • 网站如何建设数据库现货黄金看盘软件
  • 西安网站网络营销wordpress关闭手机访问
  • 学生制作网站建设 维护网站建设如何上传图片
  • 东莞桥头网站设计wordpress为艾迪
  • 做网站代码审计哪个工具比较好网页设计与制作实训步骤
  • 网站建设基础网站上海备案
  • 自己建个网站需要多少钱湖北做网站的
  • 教育行业展示网站模板网站域名注册证书是什么
  • 3合1网站建设公司vue本地访问服务器跨域
  • typecho 企业网站公司名称logo设计
  • 微信登录建设银行网站什么网站可以做平面设计赚钱
  • wordpress怎么关闭网站软件开发工程师是程序员吗
  • 网站建设实施步骤网站网站模版
  • 网站被镜像 站长学院网站建设公司运营经验
  • 德宏商城网站建设韩国建设部网站
  • 做网站要运用到代码吗小程序搭建教程
  • 网站设计不需要考虑贡井网站建设
  • 中英文网站用一个域名还是两个域名利于优化台州优秀关键词优化
  • 建公司网站要多久网站名称备案
  • 网站不提交表单淮安新网站制作
  • 网站开发时外贸资讯平台
  • 杭州市滨江区建设局网站带icp备案的网站
  • 辽宁省住房和城乡建设厅网站上不去中国网站建设的利弊
  • 建设部招标网站搬瓦工wordpress安装
  • 网站推广文章广州门户网站制作
  • 青岛seo整站优化哪家专业网络营销的概念是谁提出来的
  • 南京一对一网站建设wordpress 手赚主题
  • 网站怎么做跳转页面中企动力网站案例
  • 做平面设计去哪些网站找图wordpress 字体样式表