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

网站seo优化技能软文代写公司

网站seo优化技能,软文代写公司,长宁苏州网站建设,wordpress 添加www在进行Springboot项目开发的时候如何把每次请求都要验证的用户进行提取拦截统一处理 背景 如果不进行统一的拦截处理,其实这是一个非常痛苦的一件事情,因为每次用户请求你都要去进行用户的信息(用户信息存储在session中)的验证&…

在进行Springboot项目开发的时候如何把每次请求都要验证的用户进行提取拦截统一处理

背景

如果不进行统一的拦截处理,其实这是一个非常痛苦的一件事情,因为每次用户请求你都要去进行用户的信息(用户信息存储在session中)的验证,代码重复,所以在本篇提供一个解决方案:

定义一个拦截器,把请求都进行统一的处理,如果Session中存在用户的信息那么就放行;如果不存在,那么就直接出现异常报错未登录。在这样的一个方案中其实还存在着一个问题,在业务逻辑中我要去获取用户的信息,那不又是很麻烦了?这里可以通过ThreadLocal解决。

为什么用ThreadLocal:当用户发起请求时,会访问我们像tomcat注册的端口,任何程序想要运行,都需要有一个线程对当前端口号进行监听,tomcat也不例外,当监听线程知道用户想要和tomcat连接连接时,那会由监听线程创建socket连接,socket都是成对出现的,用户通过socket像互相传递数据,当tomcat端的socket接受到数据后,此时监听线程会从tomcat的线程池中取出一个线程执行用户请求,在我们的服务部署到tomcat后,线程会找到用户想要访问的工程,然后用这个线程转发到工程中的controller,service,dao中,并且访问对应的DB,在用户执行完请求后,再统一返回,再找到tomcat端的socket,再将数据写回到用户端的socket,完成请求和响应通过以上讲解,我们可以得知 每个用户其实对应都是去找tomcat线程池中的一个线程来完成工作的, 使用完成后再进行回收,既然每个请求都是独立的,所以在每个用户去访问我们的工程时,我们可以使用threadlocal来做到线程隔离,每个线程操作自己的一份数据

定义一个ThreadLocal线程工具类

便于对线程内部的值进行处理。

public class UserHolder {public static final ThreadLocal<User> userThreadLocal = new ThreadLocal<>();public static void setValue(User user){userThreadLocal.set(user);}public static User getValue(){return userThreadLocal.get();}public static  void clear(){userThreadLocal.remove();}
}

定义拦截器

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 获取 sessionHttpSession session = request.getSession();// 检查用户是否已登录if (session.getAttribute("user") == null) {// 用户未登录,进行相关处理throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR);}// 从 session 中获取用户数据User user = (User) session.getAttribute("user");// 将用户数据存储到 ThreadLocal 中,以便在整个请求周期内访问UserHolder.setValue(user);// 进行其他逻辑验证,根据需求自行添加return true; // 允许请求继续执行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 在请求处理之后执行,可以对 ModelAndView 进行修改}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 在请求完成之后执行,用于资源清理等操作// 清理 ThreadLocal 中的用户数据,防止内存泄漏UserHolder.clear();}
}

让拦截器生效

通过配置让拦截器生效

@Configuration
public class MvcConfig implements WebMvcConfigurer {public void addInterceptors(InterceptorRegistry registry) {// 添加拦截器// excludePath 就是排除在外被拦截的路径registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")  .excludePathPatterns("/user/login");}
}

然后就可以啦

测试

测试Controller

@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;@PostMapping("/login")public BaseResponse<User> login(HttpSession session){System.out.println("Hello");Random random = new Random(new Date().getTime()) ;User user = new User(random.nextLong(), "123","123454","123");session.setAttribute("user",user);return ResultUtils.success(user);}@GetMapping("/get")public BaseResponse<User> get(){return ResultUtils.success(UserHolder.getValue());}
}

测试结果

开始没有登录

在这里插入图片描述

进行登录

在这里插入图片描述

再次获取get请求就可以了

在这里插入图片描述

这里我出现一个问题我一直调试了很久,md,就是在配置拦截器的时候添加路径首先把所有路径进行拦截,然后放行/user/login就好,我的这个项目在配置文件中给所有的路径首先加了一个/api这样的前缀,然后我在拦截路径的时候都加了api,这个其实是不用加的,直接上路径就好了,spring自动会加。

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

相关文章:

  • 地产商网站建设网球新闻最新消息
  • 做爰全过程网站免费的视频谷歌seo搜索引擎
  • 怎么架设网站seo推广培训
  • 自己网站做问卷调查网页设计学生作业模板
  • 清远企业网站排名深圳网站建设系统
  • 互助平台网站建设费用卡点视频免费制作软件
  • 上海做b2b国际网站公司排名优化公司电话
  • 裙晖wordpress重庆seo整站优化
  • 乌克兰网站后缀谷歌浏览器下载电脑版
  • 建设部网站撤销注册资质的都是公职人员吗正规网络公司关键词排名优化
  • 杂志网站建设推广方案铜川网络推广
  • 网站建设后怎么搜索引擎优化解释
  • 网站建设维护 天博网络成都营销型网站制作
  • 秦皇岛北京网站建设百度广告投放电话
  • 团购做的比较好的网站营销推广ppt
  • 网站怎么做网站地图重庆网站制作公司哪家好
  • wordpress改地址后打不开seo品牌优化整站优化
  • 网页设计师证书含金量高吗百度网络优化
  • 咸阳网站开发长沙seo优化公司
  • 网站通cms国内十大搜索引擎排名
  • centos7安装 wordpress网站如何进行seo
  • 设计师灵感网站美国今天刚刚发生的新闻
  • 重庆南岸营销型网站建设公司推荐竞价sem托管
  • 深圳做二维码网站建设什么是互联网营销
  • 网易企业邮箱收费标准百色seo关键词优化公司
  • 做网站的财务需求张北网站seo
  • 北京赛车彩票网站怎么做佛山本地网站建设
  • 门户网站的建设方式有哪些网络推广引流
  • 做中东服装有什么网站免费seo刷排名
  • 做网站用java还是c语言百度竞价推广培训