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

福州网站建站公司洛阳网站建设找汉狮

福州网站建站公司,洛阳网站建设找汉狮,网页图片下载器,如何拥有自己的专属域名个人简介#xff1a;Java领域优质创作者#xff1b;阿里云技术博主、星级博主、专家博主#xff1b;正在Java学习的路上摸爬滚打#xff0c;记录学习的过程~ 个人主页#xff1a;.29.的博客 学习社区#xff1a;进去逛一逛~ 登录功能 实现 实现基于session的登录流程Java领域优质创作者阿里云技术博主、星级博主、专家博主正在Java学习的路上摸爬滚打记录学习的过程~ 个人主页.29.的博客 学习社区进去逛一逛~ 登录功能 实现 实现基于session的登录流程发送验证码、登录注册、校验登陆状态流程介绍①验证码发送②用户登录、注册③校验登录状态 代码实现 实现基于session的登录流程发送验证码、登录注册、校验登陆状态 流程介绍 登录流程 ①验证码发送 发送验证码 用户输入手机号点击发送按钮进行手机号提交程序会校验手机号是否合法不合法时要求用户重新输入手机号合法则在后台生成对应的验证码并保存至session之后通过短信方式将验证码发送给用户。 什么是HttpSession HttpSession是Java Web中的一个接口它提供了一种在服务器端存储和检索用户相关信息的机制。当用户第一次访问Web应用程序时服务器会为该用户创建一个唯一的session ID并将该ID存储在一个名为JSESSIONID的cookie中然后将该ID与一个新的HttpSession对象相关联。在用户与Web应用程序交互期间可以使用HttpSession对象来存储和检索与该用户相关的信息。当用户关闭浏览器或超过session超时时间时session对象将被销毁。 以下是获取和使用HttpSession对象的常用方法 1.获取HttpSession对象 HttpSession session request.getSession();2.向session中存储数据 session.setAttribute(key, value);3.从session中获取数据 Object value session.getAttribute(key);4.从session中删除数据 session.removeAttribute(key);5.使session失效 session.invalidate();②用户登录、注册 注册、登录 用户将手机号、验证码输入后台从session中获取验证码与用户输入的验证码进行比对校验如果不一致则无法通过校验提示用户验证码错误验证码一直则后台根据手机号查询用户若用户不存在则为用户创建账号信息并保存至数据库中最后无论用户是否存在都将用户的信息保存至session中方便后续业务获取当前用户信息。 ③校验登录状态 校验登陆状态 用户在客户端发起请求时Cookie会携带用户的 JsessionId 后台后台根据 JsessionId 从session中获取用户信息如果没有用户信息就表示未登录会对请求进行拦截如果有用户信息将其存入到本地线程 ThreadLocal 中并放行。 为什么使用ThreadLocal 每个用户其实对应都是去找tomcat线程池中的一个线程来完成工作的 使用完成后再进行回收既然每个请求都是独立的所以在每个用户去访问我们的工程时我们可以使用threadlocal来做到线程隔离每个线程操作自己的一份数据。 什么是 JsessionId JSessionId是Java Web应用程序中的一个会话标识符用于跟踪用户与Web应用程序之间的会话。当用户第一次访问Web应用程序时服务器会为该用户创建一个唯一的JSessionId并将其存储在cookie中。在随后的请求中浏览器会将该cookie发送回服务器以便服务器可以识别用户并维护会话状态。 在Java Web应用程序中可以使用HttpSession对象来访问和管理会话状态。 代码实现 业务逻辑实现 统一返回类型 实体类 Data NoArgsConstructor AllArgsConstructor public class Result {private Boolean success;private String errorMsg;private Object data;private Long total;public static Result ok(){return new Result(true, null, null, null);}public static Result ok(Object data){return new Result(true, null, data, null);}public static Result ok(List? data, Long total){return new Result(true, null, data, total);}public static Result fail(String errorMsg){return new Result(false, errorMsg, null, null);} } 校验手机号、邮箱、验证码格式 public class RegexUtils {/*** 是否是无效手机格式* param phone 要校验的手机号* return true:符合false不符合*/public static boolean isPhoneInvalid(String phone){return mismatch(phone, RegexPatterns.PHONE_REGEX);}/*** 是否是无效邮箱格式* param email 要校验的邮箱* return true:符合false不符合*/public static boolean isEmailInvalid(String email){return mismatch(email, RegexPatterns.EMAIL_REGEX);}/*** 是否是无效验证码格式* param code 要校验的验证码* return true:符合false不符合*/public static boolean isCodeInvalid(String code){return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX);}// 校验是否不符合正则格式private static boolean mismatch(String str, String regex){if (StrUtil.isBlank(str)) { //Hutool工具StrUtilreturn true;}return !str.matches(regex);} } 发送短信验证码 业务 Overridepublic Result sendCode(String phone, HttpSession session) {//1. 手机号不合法if(RegexUtils.isPhoneInvalid(phone)){//2. 不合法返回错误信息return Result.fail(手机号格式错误);}//3. 借助工具类生成验证码(Hutool工具)String code RandomUtil.randomNumbers(6);//4. 保存验证码至session域session.setAttribute(code,code);//5. 发送验证码log.debug(发送短信验证码成功验证码: code); //日志、方便控制台查看/*调用验证码服务...具体逻辑参照具体服务供应商的文档*///6. 返回okreturn Result.ok();}登录、注册 业务 /*** session实现登录功能* param loginForm* param session* return*/Overridepublic Result login(LoginFormDTO loginForm, HttpSession session) {//1. 校验手机号String phone loginForm.getPhone();if(RegexUtils.isPhoneInvalid(phone)){//2. 返回错误信息return Result.fail(手机号格式错误);}//3. 校验验证码Object cacheCode session.getAttribute(code);String code loginForm.getCode();if(code null || !code.toString().equals(cacheCode)){//不一致返回错误信息return Result.fail(验证码错误);}// 一致根据手机号获取用户User user this.query().eq(phone, phone).one(); //mybatisPlus提供的Service层方法//5. 判断用户是否存在if(user null){//6. 不存在创建新用户user new User();user.setPhone(phone); //设置phoneuser.setNickName(USER_NICK_NAME_PREFIX RandomUtil.randomString(10)); //设置随机昵称this.save(user); // 存入数据库mybatisPlus提供的Service层方法}//7. 用户存在存入session域session.setAttribute(user, BeanUtil.copyProperties(user, UserDTO.class));//返回okreturn Result.ok();}创建并设置ThreadLocal 自定义工具类 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();} }校验登陆状态 拦截器 /*** TODO 登录 拦截器* author .29.* create 2023-11-26 16:37*/public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.获取sessionHttpSession session request.getSession();//2. 获取用户Object user session.getAttribute(user);//3. 验证用户是否存在if(user null){//4. 不存在进行拦截返回401状态码response.setStatus(401);return false;}//5. 存在存入ThreadLocal自定义工具类UserHolder作用:创建并设置ThreadLocalUserHolder.saveUser((UserDTO) user);//6. 放行return true;}} Spring Boot使用Spring MVC拦截器的步骤如下 1.创建一个拦截器类并实现HandlerInterceptor接口该接口包含三个方法preHandle、postHandle和afterCompletion。preHandle方法在请求处理之前调用postHandle方法在请求处理之后调用afterCompletion方法在视图渲染之后调用。 2.在拦截器类上使用Component或Configuration注解将其声明为Spring组件。 3.创建一个配置类并实现WebMvcConfigurer接口该接口包含一个addInterceptors方法用于注册拦截器。 4.在addInterceptors方法中使用addInterceptor方法注册拦截器并使用addPathPatterns方法指定要拦截的请求路径。 使拦截器生效 SpringMvc配置类 /*** TODO SpringMVC配置类使拦截器生效* author .29.* create 2023-11-26 16:49*/ Configuration public class MvcConfig implements WebMvcConfigurer {Resourceprivate StringRedisTemplate stringRedisTemplate;Overridepublic void addInterceptors(InterceptorRegistry registry) {//1. 添加登录拦截器、同时设置无需拦截的路径registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(/shop/**,/voucher/**,/shop-type/**,/upload/**,/blog/hot,/user/code,/user/login).order(0); //order默认0order值越大拦截器越后执行}}
http://wiki.neutronadmin.com/news/46187/

相关文章:

  • 苏州建站方法附近找工作招聘信息
  • 成都市建设招标网站淄博网站制作形象
  • 在线生成手机网站wordpress get_category_parents
  • wordpress建站案例学做网站从零开始
  • wordpress嵌入百度地图关闭站长工具seo综合查询
  • 网站开发公司特点网站建设中企动力最佳a5
  • 邢台企业网站制作建设wordpress 图片对其
  • 做导航网站把别人的网址链接过来要经过允许吗网站核检单
  • 免费个人网站服务器推荐wordpress 在线教育 模板
  • 松岗专业做网站公司wordpress正在执行例行维护
  • 教育类的网站案例东莞智通人才招聘网
  • 网站微信公众号链接怎么做优秀的定制网站建设
  • 广东省建设信息网站成绩查询广州网站建设 广州亦客网络
  • h5响应式网站技术阿里巴巴网站的功能
  • 长沙网站外包哪个网站做相册好
  • 如何海外网站建设wordpress采集电影
  • 沭阳做网站好的阿里网站建设视频教程
  • 购物型网站模板网站怎么做区域性优化
  • 网站内的地图导航怎么做长治推广型网站建设
  • 企业营销微网站建设百度site app网站添加到网站首页源文件中的代码是哪些?
  • 医院网站建设步骤代销网站源码
  • 淘宝网站建设方案模板下载做电影采集网站用什么vps
  • 网站安全维护网站备案号信息查询
  • python3 网站开发入门怎么查网站备案接入商
  • 网站的内连接如何做做网站员培训
  • 国外网站做淘宝客长春网站网站建设
  • 娄星区建设局网站wordpress contactus
  • 绍兴网站建设公司哪家专业wordpress 用户枚举
  • 新乡营销型网站建设wordpress 模板语言包
  • 网站建设完工报告中国移动网络优化做什么的