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

北京天奕时代创意设计有限公司小红书seo

北京天奕时代创意设计有限公司,小红书seo,网站照片加水印,那个网站可以做链接基于session实现登录 1.发送短信验证码 Override public Result sendCode(String phone, HttpSession session) {//1.校验手机号是否合规if (RegexUtils.isPhoneInvalid(phone)) {//2.不合规直接返回 错误信息return Result.fail("手机号错误");}//3.如果合规生成验…

基于session实现登录

1.发送短信验证码

 

@Override
public Result sendCode(String phone, HttpSession session) {//1.校验手机号是否合规if (RegexUtils.isPhoneInvalid(phone)) {//2.不合规直接返回 错误信息return Result.fail("手机号错误");}//3.如果合规生成验证码String code = RandomUtil.randomString(4);//4.将验证码保存到session中session.setAttribute("code",code);//5.发送验证码log.info("code: {}",code);//返回okreturn Result.ok();
}

ServletContext:上下文对象,在服务器启动时被创建,关闭时被注销,被所有Servlet共享,可在web.xml中进行配置,存放一些初始化数据,拥有最长的生命周期。

HttpSession:会话对象,浏览器请求服务器时被创建,关闭浏览器窗口或页面不刷新过期时被销毁,拥有较长的生命周期。

ServletRequest:请求对象,浏览器每次发送请求时被创建,响应结束之后被销毁,用于存放来自页面的参数和浏览器信息,生命周期最短。

2.短信验证、登录、注册功能

 

@Override
public 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(session==null || !cacheCode.toString().equals(code)){//4.不一致直接报错return Result.fail("错误信息");}//5.根据手机号查询用户LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();query.eq(User::getPhone,loginForm.getPhone());User user = this.getOne(query);if(user==null){//6.不存在直接创建新用户保存到数据库中user=createUserWithPhone(loginForm.getPhone());}//7.最终将用户信息保存到session中session.setAttribute("user",user);return Result.ok();
}
​
private User createUserWithPhone(String phone) {User user = new User();user.setPhone(phone);user.setNickName(USER_NICK_NAME_PREFIX+RandomUtil.randomString(6));this.save(user);return user;
​
}

3.登录校验功能

 

创建拦截器

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");if(user==null){//3.如果不存在直接拦截  返回401状态response.setStatus(401);return false;}//4.存在  保存到ThreadLocal中实现共享UserHolder.saveUser((User) user);//5.放行return true;}
​@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//避免造成内存泄露UserHolder.removeUser();}
}

注册拦截器

//注册拦截器  及其相关配置
@Configuration
public class MvcConfig implements WebMvcConfigurer {//添加拦截器
​@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).excludePathPatterns("/shop/**","/voucher/**","/shop-type/**","/upload/**","/blog/hot","/user/code","/user/login");}
}
public class UserHolder {private static final ThreadLocal<User> tl = new ThreadLocal<>();
​public static void saveUser(User user){tl.set(user);}
​public static User getUser(){return tl.get();}
​public static void removeUser(){tl.remove();}
}

ThreadLocal叫做线程变量,意思是ThreadLocal中*填充的变量*属于*当前线程*,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

http://www.hkea.cn/news/492999/

相关文章:

  • 浙江住房和城乡建设厅报名网站下拉关键词排名
  • 银川哪里做网站百度网址名称是什么
  • 合肥公司网站建设价格低西安网络科技公司排名
  • 怎么样建设个人网站企业文化建设
  • 如何知道网站有没有备案成都seo公司
  • wordpress 艺术主题南京网络优化公司有哪些
  • 贵阳网站备案百度网站优化方案
  • 单位网站建设论文怎么做竞价托管
  • 建筑公司网站有哪些谈谈自己对市场营销的理解
  • 做ppt音乐怎么下载网站企业培训课程有哪些
  • magento网站建设网站优化排名软件网站
  • 做生鲜食品最好的网站网络推广及销售
  • 销售管理系统需求分析长沙seo代理
  • 站长网站查询深圳百度关键字优化
  • 用net语言做网站平台好不好企业培训师资格证报考2022
  • 成都定制网站设竞价推广遇到恶意点击怎么办
  • 制作视频网站建设友链交易网
  • 做外贸是不是要有网站腾讯企点app下载安装
  • 网站开发快递文件国外网站怎么推广
  • 网站和搜索引擎站长论坛
  • 做违法网站会怎样外贸独立站怎么建站
  • 云主机建网站教程深圳全网推互联科技有限公司
  • 做网站赚50万谷歌搜索引擎363入口
  • 台州网站设计外包网页制作公司排名
  • 网站建设投标文件范本亚马逊提升关键词排名的方法
  • 学做网站需要多长时间免费推广平台排行
  • wordpress运行php 404360优化大师下载
  • seo排名网站 优帮云线上推广的三种方式
  • 平凉哪有做网站的百度推广登录入口官网网
  • 娄底网站优化自建网站平台有哪些