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);
 
    } 
}  
相关推荐
Nicholas681 分钟前
Dart锁机制之synchronized源码解析Lock、BasicLock、objectMakeLock、objectSynchronized(一)
前端
武子康3 分钟前
AI研究-133 Java vs Kotlin/Go/Rust/Python/Node:2025 详细对比分析 定位与取舍指南
java·javascript·python·golang·rust·kotlin·node
s***41135 分钟前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
k***92166 分钟前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
小帆聊前端6 分钟前
深度解读虚拟列表:从原理到实战,解决长列表渲染性能难题
前端·javascript
在下历飞雨7 分钟前
Kuikly基础之动画实战:让孤寡青蛙“活”过来
前端·ios·harmonyos
kesifan9 分钟前
JAVA线程的建立方法
java·开发语言·python
2***c43511 分钟前
nginx服务器实现上传文件功能_使用nginx-upload-module模块
服务器·前端·nginx
qq_3363139312 分钟前
java基础-set类集合进阶
java·算法
p***930314 分钟前
Java进阶之泛型
android·前端·后端