From b2b1900c809f66fdc3b0395ce00c582194c5df1f Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Sun, 7 Dec 2025 11:33:54 +0800 Subject: [PATCH] =?UTF-8?q?tlias=E7=AE=A1=E7=90=86=E7=B3=BB=E7=BB=9F--?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=A0=A1=E9=AA=8C--=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8Filter=E5=AE=9E=E7=8E=B0=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=A0=A1=E9=AA=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tlias-web-management/pom.xml | 8 +++ .../java/com/inmind/filter/DemoFilter.java | 6 +- .../com/inmind/filter/LoginCheckFilter.java | 67 +++++++++++++++++++ .../java/com/inmind/filter/XbcFilter.java | 16 +++++ 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 tlias-web-management/src/main/java/com/inmind/filter/LoginCheckFilter.java create mode 100644 tlias-web-management/src/main/java/com/inmind/filter/XbcFilter.java diff --git a/tlias-web-management/pom.xml b/tlias-web-management/pom.xml index 239c30c..56ab9f4 100644 --- a/tlias-web-management/pom.xml +++ b/tlias-web-management/pom.xml @@ -75,6 +75,14 @@ jjwt 0.9.1 + + + + com.alibaba + fastjson + 2.0.53 + + diff --git a/tlias-web-management/src/main/java/com/inmind/filter/DemoFilter.java b/tlias-web-management/src/main/java/com/inmind/filter/DemoFilter.java index cf38863..20c8117 100644 --- a/tlias-web-management/src/main/java/com/inmind/filter/DemoFilter.java +++ b/tlias-web-management/src/main/java/com/inmind/filter/DemoFilter.java @@ -4,7 +4,9 @@ import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; -@WebFilter(urlPatterns = "/*") +//@WebFilter(urlPatterns = "/*") +//@WebFilter(urlPatterns = "/login") +//@WebFilter(urlPatterns = "/emps/*") public class DemoFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -15,8 +17,10 @@ public class DemoFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { System.out.println("doFilter,过滤器的拦截方法执行了"); + System.out.println("DemoFilter---放行前的逻辑"); //放行 filterChain.doFilter(request,response); + System.out.println("DemoFilter---放行后的逻辑"); } @Override diff --git a/tlias-web-management/src/main/java/com/inmind/filter/LoginCheckFilter.java b/tlias-web-management/src/main/java/com/inmind/filter/LoginCheckFilter.java new file mode 100644 index 0000000..18047e5 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/filter/LoginCheckFilter.java @@ -0,0 +1,67 @@ +package com.inmind.filter; + +import com.alibaba.fastjson.JSONObject; +import com.inmind.pojo.Result; +import com.inmind.utils.JwtUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebFilter(urlPatterns = "/*")//登录校验过滤器,拦截所有的资源请求 +@Slf4j +public class LoginCheckFilter implements Filter { + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + + //1.获取请求url(之前都是通过HttpServletRequest获取请求) + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + String url = request.getRequestURI();//http://localhost:8080/login或者http://localhost:8080/emps + log.info("请求url:"+url); + //2.判断请求url中是否有login,如果包含那就是登录接口,直接放行 + if (url.contains("login")) { + log.info("当前是登录请求,直接放行"); + filterChain.doFilter(servletRequest,servletResponse); + return;//放行后会回到当前代码中,所以要直接提前结束方法功能,否则下面的业务逻辑还会执行 + } + //3.如果不是登录操作,获取请求头中的令牌 + String jwt = request.getHeader("token"); + + //4.判断令牌是否存在 + if (!StringUtils.hasLength(jwt)) { + log.info("令牌不存在,直接响应未登录状态"); + // 未登录的响应实现 + notLogin(response); + return; + } + + //5.判断令牌的合法性,如果不合法则,响应未登录状态 + try { + JwtUtils.parseJWT(jwt); + } catch (Exception e) { + //未登录的响应实现 + notLogin(response); + return; + } + + //放行 + filterChain.doFilter(servletRequest,servletResponse); + return; + } + + private void notLogin(HttpServletResponse response) throws IOException { + //根据接口文档响应json,之前通过spring的控制器的@ResponseBody注解自动转换为json返回 + //但是当前不是控制器,所以我们要手动封装json数据响应 + Result error = Result.error("NOT_LOGIN"); + //手动将java对象转为json字符串----阿里巴巴fastJson + String notLoginJson = JSONObject.toJSONString(error); + //响应数据通过响应对象,直接返回给浏览器(客户端) + response.getWriter().write(notLoginJson); + return; + } +} diff --git a/tlias-web-management/src/main/java/com/inmind/filter/XbcFilter.java b/tlias-web-management/src/main/java/com/inmind/filter/XbcFilter.java new file mode 100644 index 0000000..bef45ff --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/filter/XbcFilter.java @@ -0,0 +1,16 @@ +package com.inmind.filter; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import java.io.IOException; + +//@WebFilter(urlPatterns = "/*") +public class XbcFilter implements Filter { + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { + System.out.println("XbcFilter -- 放行前的逻辑"); + //放行 + filterChain.doFilter(request,response); + System.out.println("XbcFilter --- 放行后的逻辑"); + } +}