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

深圳网站建设公司企业什么是网络工程师

深圳网站建设公司企业,什么是网络工程师,广州 建设 招聘信息网站,网站审批需要什么手续MVC拦截器、ThreadLocal来进行登录拦截 1. 对登录进行拦截1.1 什么是ThreadLocal1.2 定义UserHolder 类#xff0c;来封装ThreadLocal方法1.3 拦截器WebMvcConfigurer 的配置1.4 登录的配置#xff0c;当碰到拦截的方法的时候调用1.5 UserServiceImpl1.6 controller#xff… MVC拦截器、ThreadLocal来进行登录拦截 1. 对登录进行拦截1.1 什么是ThreadLocal1.2 定义UserHolder 类来封装ThreadLocal方法1.3 拦截器WebMvcConfigurer 的配置1.4 登录的配置当碰到拦截的方法的时候调用1.5 UserServiceImpl1.6 controller 1. 对登录进行拦截 1.1 什么是ThreadLocal ThreadLocal叫做线程变量意思是ThreadLocal中填充的变量属于当前线程该变量对其他线程而言是隔离的也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本那么每个线程可以访问自己内部的副本变量。 详细可以看https://blog.csdn.net/u010445301/article/details/111322569 1.2 定义UserHolder 类来封装ThreadLocal方法 package com.hmdp.utils;import com.hmdp.dto.UserDTO;public class UserHolder {private static final ThreadLocalUserDTO tl new ThreadLocal();public static void saveUser(UserDTO user){//存储值tl.set(user);}public static UserDTO getUser(){ //获得我们存储的值return tl.get();}public static void removeUser(){//移除值tl.remove();} } 1.3 拦截器WebMvcConfigurer 的配置 package com.hmdp.config;import com.hmdp.utils.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class MvcConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor())//新增一个拦截器.excludePathPatterns(//放行的接口/blog/hot,/shop/**,/upload/**,/voucher/**,/shop-type/**,/user/code,/user/login);} } 1.4 登录的配置当碰到拦截的方法的时候调用 package com.hmdp.utils;import com.hmdp.dto.UserDTO; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1.获取sessionHttpSession session request.getSession();//2.获取session的用户Object user session.getAttribute(user);/*session.setAttribute(sessionName,Object); //保存//用来设置session值的sessionName是名称object是你要保存的对象。session.getAttribute(sessionName); //取得//用来得到对应名称的session值即得到object对象注意需要进行类型转换 *///3.判断用户是否存在if (user null) {//4.不存在拦截 返回401状态码 未授权的意思response.setStatus(401);return false;}//5.存在保存到ThreadLocal 对ThreadLocal进行了规范和重写。UserHolder.saveUser((UserDTO)user);//把user保存到ThreadLocal对user进行强转//6.放行return true;}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {UserHolder.removeUser();//移除用户} }1.5 UserServiceImpl package com.hmdp.service.impl;import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hmdp.dto.LoginFormDTO; import com.hmdp.dto.Result; import com.hmdp.dto.UserDTO; import com.hmdp.entity.User; import com.hmdp.mapper.UserMapper; import com.hmdp.service.IUserService; import com.hmdp.utils.RegexUtils; import org.springframework.stereotype.Service;import javax.annotation.Resource; import javax.servlet.http.HttpSession;/*** p* 服务实现类* /p** author 虎哥* since 2021-12-22*/ Service public class UserServiceImpl extends ServiceImplUserMapper, User implements IUserService {Overridepublic Result sendCode(String phone, HttpSession session) {//1.校验手机号if (RegexUtils.isPhoneInvalid(phone)){//RegexUtils去校验手机号是否无效再utils中//2.如果不符合返回错误信息return Result.fail(手机号格式错误);}//3.符合生成验证码String code RandomUtil.randomNumbers(6);//生成一个6位的随机数字验证码//4.保存验证码到sessionsession.setAttribute(code,code);//5.发送验证码如果我们要发送短信的话需要通过第三方平台比如阿里云之类的所以我们直接使用log日志输出log.debug(发送短信验证码成功验证码 code);//返回okreturn Result.ok();}Overridepublic Result login(LoginFormDTO loginForm, HttpSession session) {//1.校验手机号//因为我们需要确定登录的时候手机号还是不是一个String phone loginForm.getPhone();if (RegexUtils.isPhoneInvalid(phone)){//RegexUtils去校验手机号是否无效再utils中//2.如果不符合返回错误信息return Result.fail(手机号格式错误);}//2.校验验证码Object CacheCode session.getAttribute(code);String code loginForm.getCode();if (CacheCodenull||!CacheCode.toString().equals(code)){//3.不一致报错return Result.fail(验证码错误);}//4.一致根据手机号查询用户 select * from tb_user where phone ? query,因为我们在这个类上面extends ServiceImplUserMapper, User所以可以使用mybatisPlusUser user query().eq(phone, phone).one();//one()是查询一个如果查询不到返回null//5.判断用户是否存在if (user null) {//6.不存在创建新用户保存user creteUserWithPhone(phone);}//7.保存用户信息到sessionsession.setAttribute(User, BeanUtil.copyProperties(user, UserDTO.class));//将user对象转换成UserDTO对象再保存到session中return Result.ok();}//每一个session都有一个sessionid当我们访问tomcat的时候就已经自动带着了所以又sessionId就能知道是哪个用户private User creteUserWithPhone(String phone) {//1.创建用户User user new User();user.setPhone(phone);user.setNickName(User_RandomUtil.randomString(10));//2.保存用户save(user);return user;} } 1.6 controller package com.hmdp.controller;import com.hmdp.dto.LoginFormDTO; import com.hmdp.dto.Result; import com.hmdp.dto.UserDTO; import com.hmdp.entity.UserInfo; import com.hmdp.service.IUserInfoService; import com.hmdp.service.IUserService; import com.hmdp.utils.UserHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*;import javax.annotation.Resource; import javax.servlet.http.HttpSession;/*** p* 前端控制器* /p** author 虎哥* since 2021-12-22*/ Slf4j RestController RequestMapping(/user) public class UserController {Resourceprivate IUserService userService;Resourceprivate IUserInfoService userInfoService;/*** 发送手机验证码*/PostMapping(code)public Result sendCode(RequestParam(phone) String phone, HttpSession session) {// TODO 发送短信验证码并保存验证码return userService.sendCode(phone,session);//因为我们的短信验证码要保存在session当中}/*** 登录功能* param loginForm 登录参数包含手机号、验证码或者手机号、密码*/PostMapping(/login)public Result login(RequestBody LoginFormDTO loginForm, HttpSession session){// 实现登录功能return userService.login(loginForm,session);}/*** 登出功能* return 无*/PostMapping(/logout)public Result logout(){// TODO 实现登出功能return Result.fail(功能未完成);}GetMapping(/me)public Result me(){// 获取当前登录的用户并返回UserDTO user UserHolder.getUser();return Result.ok((UserDTO)user);}GetMapping(/info/{id})public Result info(PathVariable(id) Long userId){// 查询详情UserInfo info userInfoService.getById(userId);if (info null) {// 没有详情应该是第一次查看详情return Result.ok();}info.setCreateTime(null);info.setUpdateTime(null);// 返回return Result.ok(info);} }
http://www.w-s-a.com/news/884400/

相关文章:

  • 洛阳建站洛阳市网站建设视觉设计专业
  • 婚恋网站建设分析网站建设硬件需求
  • 北京做网站电话wordpress如何换图片
  • 电影网站做cpa深圳信息网
  • 单县网站建设优化大师电脑版官网
  • 番禺区住房和建设局物业网站浦东新区网站设计
  • 外贸网站外包WordPress仿牌
  • 如何设计网站logohtml5开发
  • 金坛建设银行总行网站网站开发费用如何记账
  • 贵阳企业网站设计制作湛江知名网站建设电话
  • 网站建设安全性高清效果图网站
  • 上海网站排名推广黄山公司做网站
  • 全国网站建设公司实力排名单页面网站建设
  • 网站建设方案 规划wordpress 要备案吗
  • 一个完整的网站 技术网站建设中 敬请期待.
  • 如何建一个公司的网站网上怎么推广公司产品
  • 十大旅游电子商务网站影楼网站制作
  • 深圳网站建设代理商网业打开慢的原因
  • 旅游网站经营模式在屈臣氏做网站运营
  • 做管理信息的网站com域名查询
  • 免费推广网站推荐外贸推广平台哪个好
  • 腾宁科技做网站399元全包企业校园网站建设
  • 海外医疗兼职网站建设公司取名字大全免费
  • 龙口市规划建设局网站vi设计和品牌设计的区别
  • 企业网站的总体设计网站建设评审验收会议主持词
  • 网站建设完成推广响应式网站设计开发
  • 电商网站用php做的吗网站开发流程可规划为那三个阶段
  • flash网站怎么做音乐停止深圳网站建设金瓷网络
  • 哪个网站可以做房产信息群发怎么做国内网站吗
  • 微商城网站建设公司的价格卖磁铁的网站怎么做的