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);
 
    } 
}  
相关推荐
云飞云共享云桌面7 分钟前
传统工作站 vs 云飞云共享云桌面:制造业设计云桌面选型深度对比
运维·服务器·前端·网络·3d·架构·制造
huangdong_9 分钟前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
UXbot15 分钟前
如何选择适合公司项目的UI设计工具?企业选型指南
前端·低代码·ui·团队开发·原型模式·设计规范·web app
記億揺晃着的那天24 分钟前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录91734 分钟前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
llz_1121 小时前
web-第四次课后作业
前端·spring boot·web
JAVA面经实录9171 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
武清伯MVP2 小时前
前端跨域方案大合集
前端·javascript
一杯奶茶¥2 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码2 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛