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

安徽区块链虚拟币网站开发价格长沙优化网站多少钱

安徽区块链虚拟币网站开发价格,长沙优化网站多少钱,wordpress调用指定分类的文章列表,wordpress 搭建wiki开发流程 该业务基于rouyi生成好了mapper和service的代码#xff0c;现在需要在controller层写接口 实际操作流程#xff1a; 看接口文档一controller里定义函数一看给出的工具类一补全controller里的函数一运行测试 接口文档 在登录模块有登录和登出方…开发流程 该业务基于rouyi生成好了mapper和service的代码现在需要在controller层写接口 实际操作流程 看接口文档一controller里定义函数一看给出的工具类一补全controller里的函数一运行测试 接口文档 在登录模块有登录和登出方法 登录分出登录成功、账号密码错误、密码多次错误三种情况 登出点了一定登出成功 controller里定义 在注解框架里加上login和logout两个函数 RestController RequestMapping(value /api) Api(tags {登录模块}) public class LoginController {Autowiredprivate CardUserService userService;Autowiredprivate RedisUtil redisUtil;PostMapping(/login)ApiOperation(value 登录)ApiImplicitParams({ApiImplicitParam(nameaccount,value 用户名,required true),ApiImplicitParam(namepassword,value 密码,required true)})public ApiResult login(HttpServletRequest request, RequestParam String account,RequestParam String password) {//TODOreturn null;}GetMapping(/logout)ApiOperation(value 退出)public ApiResult logout(HttpServletRequest request) {//TODOreturn null;}} 看给出的工具类 找该模块附近的common和util包 补全controller里的函数 login部分 首先拿到用户基于rouyi使用的mybatis-plus QueryWrapperCardUser wrapper new QueryWrapper(); wrapper.eq(uname,account).eq(passwd,PasswordUtil.encodePassword(password)); ListCardUser users userService.list(wrapper); QueryWrapperCardUser wrapper new QueryWrapper(); 创建一个 QueryWrapper 对象 wrapper用于构建查询条件。 wrapper.eq(uname,account).eq(passwd,PasswordUtil.encodePassword(password)); 使用 wrapper 对象的 eq 方法添加查询条件这里表示查询条件为用户名uname 字段等于 account 变量的值并且密码passwd 字段等于经过加密后的 password 变量的值。 ListCardUser users userService.list(wrapper); 通过 UserService 的 list 方法传入包含查询条件的 wrapper 对象执行数据库查询操作返回符合条件的 CardUser 对象列表 users。这里为什么要用wrapper获取满足条件的用户列表再取第一个呢可以直接CardUser user userService.getOne(wrapper);吗这是一种保护措施。万一数据有多条不会出错。getOne的话就报错了。用getOne然后捕获异常也可以的。 然后处理登录成功的情况 if (users ! null users.size() 0) {CardUser user users.get(0);user.setIdcard(null);user.setPasswd(null);HttpSession session request.getSession();session.setAttribute(user, user);return new ApiResult(1, 登录成功, user); }if (users ! null users.size() 0) users ! null 这一部分是为了确保 users 不为 null即确保查询返回的用户列表对象不为空。如果 users 为 null那么调用 users.size() 方法将会导致空指针异常。因此这一部分判断是为了避免空指针异常。 users.size() 0 这一部分判断是为了确保 users 列表中至少包含一个用户。即使 users 不为 null但如果其中没有任何用户也不应该继续处理和返回登录成功的信息因为没有符合条件的用户。 CardUser user users.get(0); 从查询到的用户列表中获取第一个用户对象并赋值给 user 变量。 user.setIdcard(null); 将用户对象的身份证号字段设置为 null出于安全考虑避免将密码信息传递到前端。 user.setPasswd(null); 将用户对象的密码字段设置为 null同样可能是出于安全考虑。 HttpSession session request.getSession(); 通过 request 对象获取 HttpSession 对象用于存储用户的会话信息。 session.setAttribute(user, user); 将处理后的用户对象存储到 HttpSession 中以键值对 user-user 的形式保存。 return new ApiResult(1, 登录成功, user); 最后返回一个 ApiResult 对象其中包含了状态码、消息和用户对象用于向前端传递登录成功的信息和用户数据。 接下来处理登录失败的情况 对于密码错误5次的处理 Integer errortimes (Integer) redisUtil.get(RedisKeys.USERLOGINTIMES account); if (errortimes ! null errortimes 5) {return new ApiResult(0, 密码错误5次请5分钟后再登录, null); }从 Redis 中获取用户登录错误次数 errortimes然后判断如果 errortimes 不为 null 而且大于等于 5则返回一个包含错误提示信息的 ApiResult 对象告知用户密码错误达到5次需要等待5分钟后再尝试登录。 redisUtil.get(RedisKeys.USERLOGINTIMES account) 表示根据用户账号构建的键名从 Redis 中获取该用户的登录错误次数信息。如果 Redis 中存储了该信息则返回相应的错误次数如果不存在或者 Redis 出现问题则可能返回 null。。 RedisKeys.USERLOGINTIMES 这是一个 Redis Key 的前缀用于标识存储用户登录错误次数的键名。account 这是用户的账号信息用于构建特定用户的登录错误次数的键名。 然后在判断流程增加密码错误的处理 else {redisUtil.incr(RedisKeys.USERLOGINTIMES account, 1);redisUtil.expire(RedisKeys.USERLOGINTIMES account, 60 * 5);return new ApiResult(0, 账户名或密码错误, null); }如果用户登录失败且不满足之前判断的密码错误次数达到5次的条件则会将该用户的登录错误次数加1并设置该键的过期时间为5分钟。然后返回一个包含账户名或密码错误信息的 ApiResult 对象。 完整代码 Autowired private CardUserService userService;Autowired private RedisUtil redisUtil;PostMapping(/login) ApiOperation(value 登录) ApiImplicitParams({ApiImplicitParam(nameaccount,value 用户名,required true),ApiImplicitParam(namepassword,value 密码,required true) }) public ApiResult login(HttpServletRequest request, RequestParam String account, RequestParam String password) {Integer errortimes (Integer) redisUtil.get(RedisKeys.USERLOGINTIMES account);if (errortimes ! null errortimes 5) {return new ApiResult(0, 密码错误5次请5分钟后再登录, null);}QueryWrapperCardUser wrapper new QueryWrapper();wrapper.eq(uname, account).eq(passwd, PasswordUtil.encodePassword(password));ListCardUser users userService.list(wrapper);if (users ! null users.size() 0) {CardUser user users.get(0);user.setIdcard(null);user.setPasswd(null);HttpSession session request.getSession();session.setAttribute(user, user);return new ApiResult(1, 登录成功, user);} else {redisUtil.incr(RedisKeys.USERLOGINTIMES account, 1);redisUtil.expire(RedisKeys.USERLOGINTIMES account, 60 * 5);return new ApiResult(0, 账户名或密码错误, null);} }logout部分 非常简单粗暴 HttpSession session request.getSession(); if (session ! null) {session.invalidate(); } return new ApiResult(1, 退出登录, null);首先通过HttpServletRequest获取HttpSession对象然后检查session是否为null如果不为null则调用invalidate()方法使session失效。最后返回一个表示成功退出登录的ApiResult对象。 让session失效是为了确保用户在退出登录后其会话信息得到及时清理从而避免可能存在的安全风险和信息泄漏问题。一旦会话失效用户在该会话中的所有状态和数据都会被清除包括登录凭证、用户信息等以确保用户的隐私和安全。 完整代码 GetMapping(/logout) ApiOperation(value 退出) public ApiResult logout(HttpServletRequest request) {HttpSession session request.getSession();if (session ! null) {session.invalidate();}return new ApiResult(1, 退出登录, null); }运行测试 运行springboot项目后访问http://localhost:9001/doc.html 密码正确的情况 密码错误的情况 密码错5次及以上的情况 使用nginx部署前端后进行前后端联调 登录成功还没跳转 登录失败
http://www.hkea.cn/news/14300745/

相关文章:

  • 做外贸做什么网站好门户网站模板之家
  • 凡科免费网站建设网站建设及第三方支付
  • 合肥做网站找哪家好wordpress 免费APP
  • 商城类网站用什么做什么网站能让小孩做算术题
  • 网站模型怎么做seo工作职位
  • php网站做退出的代码博客app下载安装
  • 西安做网站魔盒手机上怎么创建自己的网站
  • 阿里网站搭建wordpress 首页跳转
  • 企业网站维护合同网站更新步骤
  • 福州房地产网站建设如何建设彩票网站
  • c 做商务网站方便吗贵州城乡建设厅考试网站
  • 织梦cms建设企业网站学设计的视频网站
  • 济南市建设工程招标投标协会网站最近的新闻大事20条
  • 外贸网站建设 东莞灰色风格的网站
  • 学校网站建设状况宁波北仑网站网页建设
  • 企业网站建立流程的第一步是什么企业网站开发周期
  • 深圳市罗湖网站建设如何做一个网站的功能吗
  • 淘宝客怎么做直播网站吗亚马逊网站建设与维护方法分析
  • 建设行网站修改电话网站排名优化推广厦门
  • 南昌网站维护网页设计与制作课程内容
  • wordpress 默认主题站点北京企业网站建设推荐
  • 惠州市网站制作有限公司松岗做网站
  • 孝感网站推广广东企业网站seo报价
  • 义乌公司网站建设磐安住房和城乡建设部网站
  • title 网站建设网站建设需要哪些技术
  • 重生北京上大学开网吧做网站的小说广电基础设施建设官方网站
  • 手机网站可以做英文版本吗邮箱域名
  • 到什么网站做专利检索报告什么网站做博客好
  • 安卓手机做网站服务器吗影楼管理系统
  • 企业网站.net沈阳优化网站