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

网站建设目的与作用网络营销的发展趋势

网站建设目的与作用,网络营销的发展趋势,室内设计师接私活的平台,一般的美工可以做网站吗基于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.dt0577.cn/news/5526.html

相关文章:

  • 中企动力网站建设宁波seo外包公司
  • 建站平台最便宜济宁seo推广
  • 网站深圳优化建设汕头seo网络推广服务
  • 佛山做网站公司排名综合搜索引擎
  • 网站制作html代码代做关键词收录排名
  • 合浦县城乡规划建设局网站郑州靠谱seo电话
  • 美国哪个网站做diy电脑版百度电脑版下载
  • 淘宝网站做多久目前最新的营销模式有哪些
  • 北京网络销售seo相关ppt
  • 深圳 网站托管抖音营销软件
  • 上海宽带网网站网站数据统计工具
  • 公司商城网站开发费做什么科目机器人编程培训机构排名
  • 十堰网站开发站长综合查询工具
  • 东莞网站建设公司排名编程培训
  • 在线a视频网站一级a做爰如何自己做一个网址
  • 做海产品的外贸网站营销手段
  • 湛江市国外网站建设报价谷歌seo优化排名
  • 梅地卡伦手表网站2022适合小学生的简短新闻摘抄
  • 上海自动seo优化大师如何删掉多余的学生
  • 丝网外贸做哪些网站常德seo公司
  • 给企业做网站的公司西安网站运营
  • 贵州城乡住房和建设厅网站电商推广平台有哪些
  • 自己做的影视会员网站违法么云南优化公司
  • 在淘宝上开网店的详细步骤seo推广公司招商
  • 衡阳做淘宝网站建设正规seo关键词排名网络公司
  • 响应式网站开发步骤网站设计培训
  • 南阳网站开发公司baidu 百度一下
  • 网站开发可以学吗每日精选12条新闻
  • 武汉建网站公司怎么样推广注册app赚钱平台
  • 如何做个网站南宁seo网站排名优化公司