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);
 
    } 
}  
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
卷毛迷你猪2 天前
快速实验篇(A11)数据集成与多维分析:从单实验产出到跨实验宽表
hive·hadoop
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端