Filter 快速入门
- 定义Filter :定义一个类,是实现Filter 接口,并重写所有方法
- 配置Filter: Filter 类上加上 == @WebFilter == 注解,配置拦截资源的路径。引导类加上 == @ServletComponentScan == 开启Servlet 组件支持(也就是在spring boot 的启动类上面加上这个注释)
- 相关代码
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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, javax.servlet.ServletException {chain.doFilter(request, response);}@Overridepublic void destroy() {Filter.super.init(filterConfig);}
}
登录演示
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 {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, javax.servlet.ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) Response;String url = req.getRequestURL().toString();log.info("请求的url",url);if(url.contains("login")){log.info("登录放行");chain.doFilter(request, response);return;}String jwt= req.getHeader("token");if(StringUtils.hasLength(jwt)){log.info("请求头token为空,未返回登录的信息")Result error = Result.error("NOT_LOGIN");String notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}try{JwtUtils.parseJWT(jwt);}catch(Exception e){e.printStackTrace();log.info("解析令牌失败,返回错误信息");log.info("请求头token为空,未返回登录的信息")Result error = Result.error("NOT_LOGIN");String notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}chain.doFilter(request, response);}
}