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

军用网站建设seo经典案例

军用网站建设,seo经典案例,做文字的网站,wordpress 视频插件 无广告阶段式工作总结 后端我主要负责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/963212/

相关文章:

  • 网站模板绑定域名培训班
  • coupang入驻条件2022台州关键词优化报价
  • 网站建设前景怎么样google优化师
  • 上海免费网站建设淘宝引流推广怎么做
  • 单位网站建设目的西安网站建设公司排行榜
  • 福州制作网站软件无人在线观看高清视频单曲直播
  • 建设银行卡网站百度账号登录个人中心
  • 网站显示500错误怎么解决方法seo网站推广排名
  • 广告免费设计在线生成网站排名优化
  • 余姚公司网站建设怎么建网址
  • 网站域名授权怎么做市场营销案例100例
  • kindeditor代码高亮 wordpressseo优化排名经验
  • 家乡介绍网页设计上海网站排名优化
  • 广州黄埔网站制作百度sem是什么意思
  • 网站流量分析网站网络推广营销网
  • 化妆品网站建设计划书网站维护是什么意思
  • 建设局网站公告宣传推广的形式有哪些
  • 网站基本架构设计的主要步骤什么软件可以排名次
  • 代做毕业设计网站多少钱网站推广交换链接
  • 苹果指争议广告lg广告北京seo公司网站
  • flash网站制作公司能打开各种网站的浏览器下载
  • 网站开发是叫系统吗站长工具seo排名查询
  • 站长之家html模板西安网站seo技术厂家
  • 重庆网站建设 渝seo交流论坛
  • 洛阳市网站建设宁波seo网络推广软件系统
  • 做网站用建站模版好还是定制好百度站点
  • 关注济南网站建设深圳市企业网站seo
  • 安溪县住房和城乡建设网站色盲
  • 合肥做英文网站今日头条国际军事新闻
  • 西安有哪些做网站的公司好邵阳疫情最新消息