找回密码
 立即注册
查看: 21|回复: 0

JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战之过滤器Filter

[复制链接]

73

主题

3

精华

77

金币

技术维护QQ:515138

积分
165
发表于 4 天前 | 显示全部楼层 |阅读模式
JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战之过滤器Filter
游客,如果您要查看本帖隐藏内容请回复

  • 第1步,定义过滤器 :1.定义一个类,实现 Filter 接口,并重写其所有方法。
  • 第2步,配置过滤器:Filter类上加 @WebFilter 注解,配置拦截资源的路径。引导类上加 @ServletComponentScan 开启Servlet组件支持。
  1. @WebFilter(urlPatterns = "/*") //配置过滤器要拦截的请求路径( /* 表示拦截浏览器的所有请求 )
  2. public class DemoFilter implements Filter {
  3.     //初始化方法, web服务器启动, 创建Filter实例时调用, 只调用一次
  4.     public void init(FilterConfig filterConfig) throws ServletException {
  5.         System.out.println("init ...");
  6.     }
  7.     //拦截到请求时,调用该方法,可以调用多次
  8.     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
  9.         System.out.println("拦截到了请求...");
  10.     }
  11.     //销毁方法, web服务器关闭时调用, 只调用一次
  12.     public void destroy() {
  13.         System.out.println("destroy ... ");
  14.     }
  15. }
复制代码
当我们在Filter类上面加了@WebFilter注解之后,接下来我们还需要在启动类上面加上一个注解@ServletComponentScan,通过这个@ServletComponentScan注解来开启SpringBoot项目对于Servlet组件的支持。
启动类添加注解.jpg
  1. package com.zidiu;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.web.servlet.ServletComponentScan;
  5. @ServletComponentScan //开启对Servlet组件的支持
  6. @SpringBootApplication
  7. public class DemoApplication {
  8.     public static void main(String[] args) {
  9.         SpringApplication.run(DemoApplication.class, args);
  10.     }
  11. }
复制代码
  • init方法:过滤器的初始化方法。在web服务器启动的时候会自动的创建Filter过滤器对象,在创建过滤器对象的时候会自动调用init初始化方法,这个方法只会被调用一次。
  • doFilter方法:这个方法是在每一次拦截到请求之后都会被调用,所以这个方法是会被调用多次的,每拦截到一次请求就会调用一次doFilter()方法。
  • destroy方法: 是销毁的方法。当我们关闭服务器的时候,它会自动的调用销毁方法destroy,而这个销毁方法也只会被调用一次。
注意事项:在过滤器Filter中,如果不执行放行操作,将无法访问后面的资源。 放行操作:chain.doFilter(request, response);

过滤器封装工具:
  1. package com.zidiu.utils;
  2. import jakarta.servlet.*;
  3. import jakarta.servlet.annotation.WebFilter;
  4. import jakarta.servlet.http.HttpServletRequest;
  5. import jakarta.servlet.http.HttpServletResponse;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.http.HttpStatus;
  8. import org.springframework.util.StringUtils;
  9. import java.io.IOException;
  10. /**
  11. * 令牌校验过滤器
  12. */
  13. @Slf4j
  14. @WebFilter(urlPatterns = "/*")
  15. public class TokenFilter implements Filter {
  16.     @Override
  17.     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
  18.         HttpServletRequest request = (HttpServletRequest) req;
  19.         HttpServletResponse response = (HttpServletResponse) resp;
  20.         //1. 获取请求url。
  21.         String url = request.getRequestURL().toString();
  22.         //2. 判断请求url中是否包含login,如果包含,说明是登录操作,放行。
  23.         if(url.contains("login")){ //登录请求
  24.             log.info("登录请求 , 直接放行");
  25.             chain.doFilter(request, response);
  26.             return;
  27.         }
  28.         //3. 获取请求头中的令牌(token)。
  29.         String jwt = request.getHeader("token");
  30.         //4. 判断令牌是否存在,如果不存在,返回错误结果(未登录)。
  31.         if(!StringUtils.hasLength(jwt)){ //jwt为空
  32.             log.info("获取到jwt令牌为空, 返回错误结果");
  33.             response.setStatus(HttpStatus.SC_UNAUTHORIZED);
  34.             return;
  35.         }
  36.         //5. 解析token,如果解析失败,返回错误结果(未登录)。
  37.         try {
  38.             JwtUtils.parseJWT(jwt);
  39.         } catch (Exception e) {
  40.             e.printStackTrace();
  41.             log.info("解析令牌失败, 返回错误结果");
  42.             response.setStatus(HttpStatus.SC_UNAUTHORIZED);
  43.             return;
  44.         }
  45.         //6. 放行。
  46.         log.info("令牌合法, 放行");
  47.         chain.doFilter(request , response);
  48.     }
  49. }
复制代码
SpringBoot3+Vue3开发综合实战项目:
JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2025-12-1 06:28

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表