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

建立一个网站需要多少钱?软件开发工程师职业分析

建立一个网站需要多少钱?,软件开发工程师职业分析,网站开发一次性费用,网站logo是指在进行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.yayakq.cn/news/959189/

相关文章:

  • 西宁建设工程信息网站pc网站开发制作
  • 苏州 规划建设局网站建设通和天眼查网站
  • 建站计划书北京谁会做网站开发
  • 徐州建设工程网站视频制作培训
  • 好看的学校网站首页办公室装修大概多少钱一平方
  • 创意专业网站建设用wordpress编写网站
  • 北京鸿讯泰德网站建设做网站做得好的公司有
  • 网站降权后 换域名山东省建设监理协会官方网站
  • 更改网站后台个人主页网站模板html
  • 重庆网站怎么做出来的网站的运营与维护
  • 网站购买外链建设银行上海分行招聘网站
  • 安徽网站建设哪家好网站开发售后服务承诺
  • 网站建站公司官网wordpress统计插件WP
  • 网站的最终用户湛江专业官网建站
  • 网站想自己做怎么弄无锡网络推广楚天软件
  • 织梦网站上线北京专业网站建设公司排名
  • 网站备案是什么意思提供做网站
  • 网站建设设备网站建设费如何入帐
  • 湘潭网站建设优化技术照片处理在线
  • 自做头像的网站昆明做网站找启搜网络
  • 广东网络公司网站建设广州哪家做网站最好
  • 做网站时应该用什么软件网络规划设计师考试时间2022
  • 哈尔滨站建好了吗吉林省建设信息网电话
  • 网站系统介绍上海制作公司
  • 公司网站上面的动画怎么做服务器可以做自己网站用吗
  • 精密模具东莞网站建设有了域名和空间怎么建网站
  • 学校网站建设目的是什么意思电脑网站加速器
  • 杭州模板建站哪家好企业服务行业
  • 厦门高端网站建设公司品牌网站建设 2蝌蚪小
  • 有赞做网站网页设计颜色搭配