创建一个Filter类
实现Filter接口,导包要正确,重写里面的所有方法,init,doFilter,destory
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class MyFilter implements Filter {
private static final String[] WHITE_URLS = {"/login.html","/register.html","/user/login","/user/register"}; //这里是不要拦截的页面
private static final String[] FILE_SUFFIX = {"jpeg", "jpg","png","gif","bmp", "webp", "css","js", "woff", "woff2"}; //这里是不要拦截的静态资源
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String servletPath = request.getServletPath(); //拿到请求路径
if (Arrays.asList(WHITE_URLS).contains(servletPath) || endWith(servletPath)) {
chain.doFilter(request, response);
} else {
Object user = request.getSession().getAttribute("user");
if (user != null) { //如果拿到了session,就要放行页面
chain.doFilter(request, response); //放行
} else {//没有session,做其他处理
response.sendRedirect("/login.html");
}
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
private boolean endWith(String path) {
for (String fileSuffix : FILE_SUFFIX) {
if (path.endsWith(fileSuffix)) {
return true;
}
}
return false;
}
}
启动类注册Filter
@SpringBootApplication
public class BootVueAdminApplication {
public static void main(String[] args) {
SpringApplication.run(BootVueAdminApplication.class, args);
}
/**
* 注册Filter
*/
@Bean
public FilterRegistrationBean<MyFilter> getFilterRegistrationBean(){
FilterRegistrationBean<MyFilter> bean = new FilterRegistrationBean<>(new MyFilter());
bean.addUrlPatterns("/*");
return bean;
}
}