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

怎么做整蛊网站wordpress注册rest

怎么做整蛊网站,wordpress注册rest,产品外观设计的重要性,最好的wordpress网站文章目录 1.理解session2.理解ThreadLocal2.1 理解多线程2.2 理解lambda表达式2.3 ThreadLocal 3.基于session登录流程图4.具体登录的代码实现4.1短信发送功能4.2 短信验证码登录注册功能4.登录校验功能4.1 配置登录拦截器LoginInterceptor4.1.1 ThrealLocal类实现 4.2登录拦截…

文章目录

      • 1.理解session
      • 2.理解ThreadLocal
        • 2.1 理解多线程
        • 2.2 理解lambda表达式
        • 2.3 ThreadLocal
      • 3.基于session登录流程图
      • 4.具体登录的代码实现
        • 4.1短信发送功能
        • 4.2 短信验证码登录注册功能
        • 4.登录校验功能
          • 4.1 配置登录拦截器LoginInterceptor
          • 4.1.1 ThrealLocal类实现
        • 4.2登录拦截器加入到MvcConfig中
        • 4.3 用户登录访问

1.理解session

用户第一次在浏览器输入正确的账号密码进行http请求时候,后端会根据他的信息设置一个该账户唯一的session并保存在后端,并设置有效期,最后返回保存到浏览器cookie中。下一次请求需要浏览器携带session到后端,校验通过,用户便可以无需登录访问,否则直接被拦截。

2.理解ThreadLocal

2.1 理解多线程

实现多线程有两种方式:(.start() 方法启动)
1.继承Thread类,在类的内部写任务执行(也就是run方法)
2.实现Runnable接口,接口内部重写run方法,在把这个实现类传递到Thread线程内部即可
总结:推荐方式2,解耦合

2.2 理解lambda表达式

1.注意lambda表示式必须和函数式接口结合使用
2.函数式接口,指的是接口中只有一个抽象方法

2.3 ThreadLocal

线程内部存放该线程对应的自己数据,线程之间相互隔离,主要用在多线程并发的场景下

3.基于session登录流程图

在这里插入图片描述

1.为什么验证码是存储在session?
因为验证码是临时的,存储在session,前端请求的时候后端才能正确比对他填写的是否正确
2.后端没有显示设置session保存到浏览器?为什么前端请求后这个session会自动保存到浏览器的cookie里面?
用户登录成功,服务器会创建一个Session,生成唯一的JSESSIONID,JSESSIONID会通过Set-Cookie HTTP响应头返回给浏览器。这个过程是web容器(tomcat)自动完成,无需开发者介入

4.具体登录的代码实现

4.1短信发送功能
@Overridepublic Result sendCode(String phone, HttpSession session) {// 1.校验手机号if (RegexUtils.isPhoneInvalid(phone)){// 2.如果不符合,返回错误信息return Result.fail("手机号格式错误");}// 3.符合,生成验证码String code = RandomUtil.randomNumbers(6);// 4.保存验证码到session中(存储再服务器内存中)session.setAttribute("code", code);// 5.发送验证码log.debug("发送短信验证码成功,验证码:{}", code);return Result.ok();}
4.2 短信验证码登录注册功能
@Overridepublic Result login(LoginFormDTO loginForm, HttpSession session) {// 1.校验手机号String phone = loginForm.getPhone();if (RegexUtils.isPhoneInvalid(phone)){// 2.如果不符合,返回错误信息return Result.fail("手机号格式错误");}// 2.校验验证码String cacheCode = (String)session.getAttribute("code");String code = loginForm.getCode();if (cacheCode == null || !cacheCode.equals(code)){return Result.fail("验证码不一致");}// 3.根据手机号码查询用户信息 select * from tb_user where phone = ? 实现了mybatisplus接口ServiceImpl<UserMapper, User>User user = query().eq("phone", phone).one(); // query是mybatisplus的功能// 4.判断用户是否存在if (user == null) {// 5.用户不存在,创建新用户并保存user = createUserWithPhone(phone);}//7.保存用户信息到session中session.setAttribute("user", BeanUtil.copyProperties(user, UserDTO.class));return Result.ok();}

这里可能存在一个问题,使用自己手机号接收验证码,别人手机号登录问题

4.登录校验功能
4.1 配置登录拦截器LoginInterceptor
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");// 3.判断用户是否存在if (user == null) {response.setStatus(401);return false;}// 5.存在,保存用户信息到ThreadLocalUserHolder.saveUser((UserDTO)user);return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 移除用户UserHolder.removeUser();}
}
4.1.1 ThrealLocal类实现
public class UserHolder {private static final ThreadLocal<UserDTO> 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();}
}
4.2登录拦截器加入到MvcConfig中
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).excludePathPatterns("/user/code","/user/login","/blog/hot","/shop/**","/shop-type/**","/upload/**","/voucher/**");}
}
4.3 用户登录访问
    @GetMapping("/me")public Result me(){// 获取当前登录的用户并返回UserDTO user = UserHolder.getUser();return Result.ok(user);}

总结:用户登录访问的页面需要拦截器拦截,拦截判断成功之后,才会请求访问对应的Controller

http://www.dtcms.com/a/520845.html

相关文章:

  • 网站开通微信支付收费免费的ppt模板下载软件
  • 快速开发工具网站长沙网页制作设计
  • wordpress 搬站长沙企业seo服务
  • [人工智能-大模型-54]:模型层技术 - 数据结构+算法 = 程序
  • PHP调试,宝塔xdebug+vscode
  • 直接做的视频网站制作网站品牌公司
  • 【TypeScript】TypeScript 内置的工具类型(十四)
  • 烟台建设集团招聘信息网站自然堂网站建设情况
  • 网站开发文档的示例上海广告公司联系方式
  • Java(方法引用)
  • 让类支持比较操作:Python魔法方法详解与实践指南
  • 国产化Excel开发组件Spire.XLS教程:在Python中将Pandas DataFrame导出到Excel的详细教程
  • 招生网站建设策划方案建站 公司
  • Spring AI Alibaba Admin 正式开源!Java 企业级 AI 多智能体开发,从 0 到 1 落地指南
  • 牛品推荐|分类分级效能飞跃:美创智能数据安全分类分级平台
  • Redis发布订阅【充当消息中间件】
  • 高端网站制作平台企业策划书怎么写
  • 衡水企业做网站费用可以做用户画像的网站
  • 格式化输入/输出函数
  • 基于类内类间优化的元学习少样本故障诊断方法
  • 【02】C语言-变量的声明与赋值,printf格式化输出函数,sizeof()运算符
  • JDBC 全解析:从入门到实战,掌握数据库交互核心技术
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(7):文法運用
  • o2o网站平台怎么做知名网站排行榜
  • 移除原有 Git 仓库关联,在IDEA中重新初始化 Git 并推送到新仓库(详细图解、包含相关问题的解决办法)
  • 宠物网站建设福州企业如何建网站
  • 米兔音乐 1.0.1| 高音质电脑免费听歌,支持无损下载(夸克网盘),无广告干扰
  • 网站推广方法有中国万维网官网域名注册网站
  • 【C++】嵌套类访问外围类的私有成员
  • 常用的 git 命令