创建filter类
@Slf4j //日志注释
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*") //网络过滤器,urlpatterns选择过滤的范围
3.实现Filter接口,实现doFilter方法
package org.example.reggie.filter;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @ClassName LoginCheckFilter
* @Description TODO
* @date 2024/8/16 19:14
* @Version 1.0
*/
@Slf4j
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
log.info("拦截请求收到:{}",request.getRequestURI());
filterChain.doFilter(request, response);
}
}
4.在启动类上添加注释”@ServletComponentScan“
4.过滤某些页面
package org.example.reggie.filter;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.example.reggie.common.R;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @ClassName LoginCheckFilter
* @Description TODO
* @date 2024/8/16 19:14
* @Version 1.0
*/
@Slf4j
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
//路径匹配器,支持通配符
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
// 1.获取本次请求的url
String requestURI=request.getRequestURI();
String[] urls=new String[]{//过滤的路径
"/employee/login",
"/employee/register",
"/employee/logout",
"/backend/**",
"/front/**"
};
//2.判断本次请求是否需要处理
boolean check = check(urls, requestURI);
//3.如果不需要处理,则直接放行
if(check){
filterChain.doFilter(request, response);
return;
}
//4.判断登录状态,如果已登录,则直接放行
if(request.getSession().getAttribute("employee")!=null){
filterChain.doFilter(request, response);
return;
};
//5.如果未登录则返回未登录结果,通过输出流的方式向客户端页面响应数据
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
return;
}
/*
* 路径匹配,检查此次是否需要放行
* */
public boolean check(String[] urls,String requestURI){
for (String url:urls){
boolean math=PATH_MATCHER.match(url,requestURI);
if(math){
return true;
}
}
return false;
}
}