Filter快速入门 Java web

文章目录

Filter 快速入门

  1. 定义Filter :定义一个类,是实现Filter 接口,并重写所有方法
  2. 配置Filter: Filter 类上加上 == @WebFilter == 注解,配置拦截资源的路径。引导类加上 == @ServletComponentScan == 开启Servlet 组件支持(也就是在spring boot 的启动类上面加上这个注释)
  3. 相关代码
java 复制代码
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

@Slf4j
@WebFilter(urlPatterns = "/*")//表示所有路径
public class DemoFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {//初始化方法,web服务器启动,创建Filter时,调用,只是调用一次
       Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)           throws IOException, javax.servlet.ServletException {//拦截到请求时候,调用该方法,可调用多次
        // 在此处记录请求信息 

        // 继续执行过滤器链
        chain.doFilter(request, response);
 
    }

    @Override
    public void destroy() {//关闭服务器时候调用,只是调用一次/摧毁方法
          Filter.super.init(filterConfig);
    }
}  

登录演示

java 复制代码
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

@Slf4j
@WebFilter(urlPatterns = "/*")//表示所有路径
public class DemoFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)           throws IOException, javax.servlet.ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) Response;
		// 1. 获取请求URL
		String url = req.getRequestURL().toString();
		log.info("请求的url",url);

		//2.判断请求url中是否含有login,如果包含,就说明是登录操作,放行
		if(url.contains("login")){//这边建议与登录路径完全一致
		log.info("登录放行");
			  chain.doFilter(request, response);
			  return;
		}
		//3.获取请求头中的令牌(token)
		String jwt= req.getHeader("token");
		//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)
		if(StringUtils.hasLength(jwt)){//看看hutool工具包,如果找不到该方法
			log.info("请求头token为空,未返回登录的信息")
			Result error = Result.error("NOT_LOGIN");
			//手动转换 对象 --> json  ---------> 使用阿里巴巴fast.json()
			String notLogin = JSONObject.toJSONString(error);
			resp.getWriter().write(notLogin);//返回字符串
			return;
		}
		//5.解析token。如果解析失败,返回错误结果(未登录)
		try{
			JwtUtils.parseJWT(jwt);//报错就说明解析失败,jwt有改动,或者时间过期了,未报错,说明解析成功
		}catch(Exception e){
			e.printStackTrace();
			log.info("解析令牌失败,返回错误信息");
			log.info("请求头token为空,未返回登录的信息")
			Result error = Result.error("NOT_LOGIN");
			//手动转换 对象 --> json  ---------> 使用阿里巴巴fast.json()
			String notLogin = JSONObject.toJSONString(error);
			resp.getWriter().write(notLogin);//返回字符串
			return;
		
		}
		//6.放行
        chain.doFilter(request, response);
 
    } 
}  
相关推荐
栈与堆28 分钟前
LeetCode 19 - 删除链表的倒数第N个节点
java·开发语言·数据结构·python·算法·leetcode·链表
豆苗学前端29 分钟前
你所不知道的前端知识,html篇(更新中)
前端·javascript·面试
一路向北·重庆分伦30 分钟前
03-01:MQ常见问题梳理
java·开发语言
一 乐31 分钟前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
zzjyr31 分钟前
Webpack 生命周期原理深度解析
前端
xiaohe060134 分钟前
💘 霸道女总裁爱上前端开发的我
前端·游戏开发·trae
lhrimperial37 分钟前
企业智能知识库助手落地实践:从RAG到Multi-Agent
java·spring cloud·微服务·系统架构·知识图谱
sophie旭37 分钟前
内存泄露排查之我的微感受
前端·javascript·性能优化
3***688442 分钟前
Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
java·spring boot·后端
k***1951 小时前
Spring 核心技术解析【纯干货版】- Ⅶ:Spring 切面编程模块 Spring-Instrument 模块精讲
前端·数据库·spring