通过servlet拦截器拦截非登录状态的请求
package com.lei.filter;
import com.lei.utils.JwtUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* 在启动类加上@ServletComponentScan代表对servlet组件的支持
* /login: 只有访问/login路径时才会被拦截
* /login/*: 访问/login下的所有资源都会被拦截
* /*: 访问所有资源都会被拦截
*/
@WebFilter(urlPatterns = "/*")//设置浏览器要拦截的请求
public class FilterDemo implements Filter {
@Override//拦截请求后调用
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
//1.获取请求url
String url = req.getRequestURL().toString();
//2.判断请求url是否包含login,如果包含则放行
if (url.contains("login")){
chain.doFilter(req,resp);//放行操作
return;//让放行后不在执行后面的代码
}
//3.获取请求头中的令牌token
String jwt = req.getHeader("token");
//4.解析令牌
try {
JwtUtils.parseJwt(jwt);
} catch (Exception e) {
// e.printStackTrace();
System.out.println("令牌错误");
resp.getWriter().write("未登录11111");
return;
}
//5.放行
chain.doFilter(req,resp);//放行操作
System.out.println("放行后执行");//放行后执行的操作
}
@Override//初始化方法,只调用一次
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init方法被执行");
}
@Override//销毁行方法,只调用一次
public void destroy() {
System.out.println("destroy销毁方法被执行");
}
}