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

wordpress第三方登录教程临沂seo网站管理

wordpress第三方登录教程,临沂seo网站管理,做设计的什么网站能挣钱,许昌 网站建设阶段式工作总结 后端我主要负责user模块,包含UserController和UserService,代码和逻辑展示如下: 用户注册 接收 UserRegisterRequest,这是一个数据传输对象,用于在 前端与后端之间传输用户注册数据。接下来判空&…

阶段式工作总结

后端我主要负责user模块,包含UserController和UserService,代码和逻辑展示如下:

用户注册

接收 UserRegisterRequest,这是一个数据传输对象,用于在 前端与后端之间传输用户注册数据。接下来判空,然后调用service中的userregister函数,我们看service层的这个函数,一系列校验……使用 synchronized 锁住 userAccount,防止并发注册相同账号:用synchronized 创建一个同步代码块,当两个线程注册同一个用户名时,通过 intern() 方法,两个用户名相同的线程会获取到常量池中同一个字符串对象的引用,count>0,即可判断用户名重复。然后如果不重复则继续进行密码加密逻辑:用 MD5 算法对密码进行加密,SALT 是之前定义的盐值。然后创建新的 User 对象,设置用户账号和加密后的密码,调用 save 方法保存用户数据到数据库,如果保存失败,抛出系统错误异常,保存成功则返回新创建用户的ID。

/*** 用户注册** @param userRegisterRequest* @return*/@PostMapping("/register")public BaseResponse<Long> 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 BaseResponse<LoginUserVO> 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 BaseResponse<Boolean> 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 BaseResponse<LoginUserVO> 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 BaseResponse<Long> 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 BaseResponse<Boolean> 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 BaseResponse<Boolean> 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获得用户视图对象,调用上面的方法获取用户基本信息,然后下面从响应中提取用户数据,将用户对象转换为视图对象并返回。

VO(View Object,视图对象)是一种设计模式,用于将后端数据模型转换为适合前端展示的形式。它通常只包含前端需要展示的字段,可能包含计算字段或格式化后的数据,隐藏敏感或不必要的后端字段。

/*** 根据 id 获取包装类** @param id* @param request* @return*/@GetMapping("/get/vo")public BaseResponse<UserVO> getUserVOById(long id, HttpServletRequest request) {BaseResponse<User> 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 BaseResponse<Boolean> 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/294784/

相关文章:

  • 网站建设空间是指什么软件网站优化最为重要的内容是
  • 做美工要开通什么网站的会员呢新网站友链
  • 网站集约化建设推进情况推广app赚钱
  • 番禺大石做网站域名污染查询网站
  • 长沙市在建工程项目免费seo快速排名工具
  • 南宁定制网站制作电话图片外链生成工具
  • 哪些网站做的海报比较高大上百度客服电话是多少
  • 菏泽网站建设电话常州seo外包
  • 做木皮的网站裂变营销五种模式十六种方法
  • 精美 企业网站模板微信软文推广怎么做
  • 怎么建立一个网站里面可以查询资料百度权重域名
  • 网站建设顺序镇江交叉口优化
  • 低价企业网站搭建软文新闻发布网站
  • 创造与魔法官方网站做自己喜欢的事seo视频
  • 淘宝联盟推广网站怎么做吉安seo招聘
  • 工程招聘网站如何免费制作自己的网站
  • 网站建设调研问卷搜易网托管模式的特点
  • 在哪个网站可以做java面试题宁德市蕉城区疫情
  • 2021年重大新闻事件seo快速工具
  • 拼多多网店南宁优化推广服务
  • 洛阳建筑公司排名长沙官网seo服务
  • 网站关键词优化公司哪家好企业网站seo点击软件
  • 做网站有必要?优化师培训
  • 网站怎么发布信息百度推广优化技巧
  • 西安软件培训百度百科优化排名
  • 网站上文章加入音乐是怎么做的网页代码
  • 深圳公布最新出行政策徐州seo招聘
  • wordpress的漏洞seo优化知识
  • 网站建设高端seo和sem分别是什么
  • 成交功能网站怎么推广自己的产品