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

搜索引擎是软件还是网站网站排行榜上升代码

搜索引擎是软件还是网站,网站排行榜上升代码,设计好的建设专业网站,wordpress域名根目录阶段式工作总结 后端我主要负责user模块#xff0c;包含UserController和UserService#xff0c;代码和逻辑展示如下#xff1a; 用户注册 接收 UserRegisterRequest#xff0c;这是一个数据传输对象#xff0c;用于在 前端与后端之间传输用户注册数据。接下来判空包含UserController和UserService代码和逻辑展示如下 用户注册 接收 UserRegisterRequest这是一个数据传输对象用于在 前端与后端之间传输用户注册数据。接下来判空然后调用service中的userregister函数我们看service层的这个函数一系列校验……使用 synchronized 锁住 userAccount防止并发注册相同账号用synchronized 创建一个同步代码块当两个线程注册同一个用户名时通过 intern() 方法两个用户名相同的线程会获取到常量池中同一个字符串对象的引用count0即可判断用户名重复。然后如果不重复则继续进行密码加密逻辑用 MD5 算法对密码进行加密SALT 是之前定义的盐值。然后创建新的 User 对象设置用户账号和加密后的密码调用 save 方法保存用户数据到数据库如果保存失败抛出系统错误异常保存成功则返回新创建用户的ID。 /*** 用户注册** param userRegisterRequest* return*/PostMapping(/register)public BaseResponseLong userRegister(RequestBody UserRegisterRequest userRegisterRequest) {if (userRegisterRequest null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}String userAccount userRegisterRequest.getUserAccount();String userPassword userRegisterRequest.getUserPassword();String checkPassword userRegisterRequest.getCheckPassword();if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) {return null;}long result userService.userRegister(userAccount, userPassword, checkPassword);return ResultUtils.success(result);} 用户登录 首先也是接收userloginrequest用于前后端传输用户登录数据然后在账号密码不为空的情况下调用userService.userLogin() 完成登录逻辑。看service层校验……将密码加密将account和加密后的密码与数据库中已有信息进行比对如果找到匹配的用户返回 User 对象如果没有找到匹配的用户返回 null。登录失败错误码ErrorCode.PARAMS_ERROR登陆成功则将用户信息存储在会话中USER_LOGIN_STATE 是常量表示会话的 key。返回用户视图对象过滤敏感信息。 /*** 用户登录** param userLoginRequest* param request* return*/PostMapping(/login)public BaseResponseLoginUserVO userLogin(RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {if (userLoginRequest null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}String userAccount userLoginRequest.getUserAccount();String userPassword userLoginRequest.getUserPassword();if (StringUtils.isAnyBlank(userAccount, userPassword)) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}LoginUserVO loginUserVO userService.userLogin(userAccount, userPassword, request);return ResultUtils.success(loginUserVO);} 用户注销 调用service检查是否已登录Session 是否存在移除 USER_LOGIN_STATE 对应的 Session。 /*** 用户注销** param request* return*/PostMapping(/logout)public BaseResponseBoolean userLogout(HttpServletRequest request) {if (request null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}boolean result userService.userLogout(request);return ResultUtils.success(result);} 获取当前用户信息 getLoginUser() 获取当前用户。Service中的方法是从session中获取用户如果是空则抛出异常。这个 currentUser 可能是从会话中获取的可能不是最新的数据使用 getById 方法从数据库中重新查询用户信息确保了获取到的是最新的用户数据。 /*** 获取当前登录用户** param request* return*/GetMapping(/get/login)public BaseResponseLoginUserVO getLoginUser(HttpServletRequest request) {User user userService.getLoginUser(request);return ResultUtils.success(userService.getLoginUserVO(user));} Service方法判定是否为管理员 这段代码实现了判断用户是否为管理员的功能它提供了两个重载方法一个接收 HttpServletRequest 参数从会话中获取用户信息并判断另一个直接接收 User 对象进行判断。判断逻辑是检查用户对象是否存在且其 userRole 字段是否等于 UserRoleEnum.ADMIN 的值如果满足这两个条件则说明该用户是管理员。这种设计既支持从会话中获取用户信息进行判断也支持直接传入用户对象进行判断。 /*** 是否为管理员** param request* return*/Overridepublic boolean isAdmin(HttpServletRequest request) {// 仅管理员可查询Object userObj request.getSession().getAttribute(USER_LOGIN_STATE);User user (User) userObj;return isAdmin(user);}Overridepublic boolean isAdmin(User user) {return user ! null UserRoleEnum.ADMIN.getValue().equals(user.getUserRole());} 管理员添加/删除/更新用户 AuthCheck是自定义权限注解只有管理员 (ADMIN) 可以访问。UserAddRequest前端传入的 数据传输对象仅包含必要的用户信息如 username, password, role 等。通过BeanUtils.copyProperties()Spring 提供的工具方法将数据传输对象的属性复制到实体类避免手动 set 每个字段。然后MyBatis-Plus 提供的通用 Service 方法执行insert方法将数据存入数据库。 直接调用 MyBatis-Plus 的 save()、removeById()、updateById() 方法。 /*** 创建用户** param userAddRequest* param request* return*/PostMapping(/add)AuthCheck(mustRole UserConstant.ADMIN_ROLE)public BaseResponseLong addUser(RequestBody UserAddRequest userAddRequest, HttpServletRequest request) {if (userAddRequest null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}User user new User();BeanUtils.copyProperties(userAddRequest, user);boolean result userService.save(user);ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);return ResultUtils.success(user.getId());}/*** 删除用户** param deleteRequest* param request* return*/PostMapping(/delete)AuthCheck(mustRole UserConstant.ADMIN_ROLE)public BaseResponseBoolean deleteUser(RequestBody DeleteRequest deleteRequest, HttpServletRequest request) {if (deleteRequest null || deleteRequest.getId() 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}boolean b userService.removeById(deleteRequest.getId());return ResultUtils.success(b);}/*** 更新用户** param userUpdateRequest* param request* return*/PostMapping(/update)AuthCheck(mustRole UserConstant.ADMIN_ROLE)public BaseResponseBoolean updateUser(RequestBody UserUpdateRequest userUpdateRequest,HttpServletRequest request) {if (userUpdateRequest null || userUpdateRequest.getId() null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}User user new User();BeanUtils.copyProperties(userUpdateRequest, user);boolean result userService.updateById(user);ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);return ResultUtils.success(true);} 根据用户id获取用户信息 首先检查id是否合法不合法则抛出异常。合法则通过服务层根据id查询不存在则抛出异常存在则返回用户信息。 根据id获得用户视图对象调用上面的方法获取用户基本信息然后下面从响应中提取用户数据将用户对象转换为视图对象并返回。 VOView Object视图对象是一种设计模式用于将后端数据模型转换为适合前端展示的形式。它通常只包含前端需要展示的字段可能包含计算字段或格式化后的数据隐藏敏感或不必要的后端字段。 /*** 根据 id 获取包装类** param id* param request* return*/GetMapping(/get/vo)public BaseResponseUserVO getUserVOById(long id, HttpServletRequest request) {BaseResponseUser response getUserById(id, request);User user response.getData();return ResultUtils.success(userService.getUserVO(user));} 更新个人信息 首先检查请求参数是否为空为空则抛出异常然后实现更改密码系列操作获取新密码如果获取到的数据不为空则检查长度。合法则获得输入的原密码将原密码加密与数据库存储的原密码比对相同则可以修改md5加密新密码并设置到更新请求对象中旧密码输入的不对则不允许更改。接下来将更改保存到数据库中获得当前的用户对象将用户id设置为当前登录用户id通过update方法将更新保存至数据库中结束信息更新。 /*** 更新个人信息** param userUpdateMyRequest* param request* return*/PostMapping(/update/my)public BaseResponseBoolean updateMyUser(RequestBody UserUpdateMyRequest userUpdateMyRequest,HttpServletRequest request) {if (userUpdateMyRequest null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}String updatePassword userUpdateMyRequest.getUpdatePassword();if (updatePassword ! null) {if (updatePassword.length() 8) {throw new BusinessException(ErrorCode.PARAMS_ERROR, 密码设置过短至少8位);}//说明需要更新密码String AccessPassword userUpdateMyRequest.getAccessPassword();if (AccessPassword ! null) {String encryptAccessPassword DigestUtils.md5DigestAsHex((SALT AccessPassword).getBytes());if (encryptAccessPassword.equals(userUpdateMyRequest.getUserPassword())) {// 2. 加密String encryptPassword DigestUtils.md5DigestAsHex((SALT updatePassword).getBytes());userUpdateMyRequest.setUserPassword(encryptPassword);} else {return ResultUtils.error(1, 原密码不正确);}}}User loginUser userService.getLoginUser(request);User user new User();BeanUtils.copyProperties(userUpdateMyRequest, user);user.setId(loginUser.getId());boolean result userService.updateById(user);ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);return ResultUtils.success(true);} 以上是后端controller中的方法大部分都调用了UserService中的方法逻辑已经阐述清晰故不再黏贴service方法了。 项目实训中我的工作至此告一段落接下来会进行总结和反思~
http://www.hkea.cn/news/14506911/

相关文章:

  • 网站内容更新用什么设计页面尺寸图
  • 南京网站制作价格浙江网站备案
  • 招标网站开发文档上海网站建设公司站霸网络
  • 二级网站怎么建设小型企业网站开发
  • 电子商务网站建设与管理 笔记济宁网站优化公司
  • 开封网站建设流程网站建设合同中的违约责任
  • 大连网站优化快速排名建设银行上海分行招聘网站
  • 如何用asp编写网站后台高质量的常州网站建设
  • 未来做哪些网站能致富html代码特效
  • 容桂网站建设原创英文网站建设详细方案
  • 密云网站建设服务上海网站建设推广
  • 深圳做网站做app一个网站的主题和设计风格
  • 自学网页设计的网站学做网站需要什么条件
  • 周村网站制作首选公司seo教程技术优化搜索引擎
  • 登录企业网站管理系统Seo与网站推广的技术对比
  • 网站免费源代码成都微信网站建设报价单
  • 信誉好的企业网站建设天津网站建设案例教程
  • 建网站后如何运营中山网站建设如何
  • 凯里网络公司建设网站开发小网站排名
  • wordpress建站中英文企业网站搭建价格
  • 建设部标准网站wordpress 谷歌插件
  • 网站上线多少钱网站生成手机站
  • 沈阳出名网站免费cad图纸下载网
  • 杂谈发现一只网站是你们谁做的代理企业网站备案
  • 广东省建网站公司面向搜索引擎网站建设
  • 网站建设建站在线建站网站免费推广大全
  • 深圳企业网站建设服务好网站多少钱
  • 个人网站如何做支付功能厦门市建设工程安全质量协会网站
  • 潍柴新建站登录网址现在建网站多少钱
  • 以数字域名为网址的网站成都专业网站制作哪家好