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

搜索引擎是软件还是网站北京做网站的公司排行

搜索引擎是软件还是网站,北京做网站的公司排行,免费的培训网站建设,加盟什么连锁最挣钱阶段式工作总结 后端我主要负责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.dnsts.com.cn/news/53351.html

相关文章:

  • 顶呱呱集团 网站建设龙岗网站(建设深圳信科)
  • 免费网站建站下载编程网课哪家好
  • 如何做网站服务器映射深圳网站建设-猴王网络
  • 做画册的网站网站运营频道内容建设
  • 网站推广的常用方法有哪些?cms做视频网站
  • 李志自己做网站lamp网站开发黄金组...
  • 做网站运营需要培训吗wordpress edu 2.0
  • PHP网站开发涉及的工具有哪些计算机网站建设与开发
  • 手机微网站怎么设计方案朝阳seo网站建设
  • 电子商务网站建设视频c网站开发教程
  • 国内最大的网站制作公司网站清除黑链
  • 做房地产资质是什么网站查房建设计网站
  • 深圳横岗做网站互联网推广seo
  • 西安网站seo报价网站项目规划与设计
  • 地方门户网站的推广自己做网站怎么修改语言
  • 用狐狸做logo的网站无锡网站seo报价
  • 局域网下怎么访问自己做的网站怎么做免费个人网站
  • 天猫网站的建设目标沈阳祥云医院看男科怎么样
  • 网站开发公司源码秦皇岛网站制作专家教您简单建站
  • 网站编程零基础入门前端开发的三大基石
  • 做网站需要缴什么费用官方网站建设情况
  • 怎么才能让百度收录网站兰州新站seo
  • 怎么做新网站阿里巴巴官网首页官网
  • wordpress网站统计代码网站外链建设:论坛签名是否还值得做
  • 设计师怎么弄个人网站青岛网站建设王道下拉??
  • 网站建设套餐怎么样手机网站成功案例
  • seo排名优化的方法广州网站seo地址
  • 海尔集团网站建设做html的简单网站
  • 做网站电话php建设网站后台
  • 淘宝客网站需要备案吗手机网页版登录入口