spring boot配置filter和interceptor
下面以普通的判断session是否为空的登录器来做说明
直接上代码
filter:
首先准备好我们的filter
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.LogRecord;
public class TestFilter implements Filter{
private static List<String> urlPaterrns=new ArrayList<String>();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
urlPaterrns.add("/demo/admin.jsp");//把想要忽略的url全部加进来,这只之加了一个
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse)servletResponse;
String url=request.getRequestURI();
System.out.print(url);
if(url.contains("login")||urlPaterrns.contains(url)){
filterChain.doFilter(request,response);
return;
}
HttpSession session=request.getSession();
if(session!=null){
filterChain.doFilter(request,response);
return;
}
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
@Override
public void destroy() {
}
}
假设我们的请求是http://localhost:8080/admin/add,那么getRequestURI()得到的url是/admin/add
interceptor:
interceptor就没写其中的验证过程了,和filter中相似,只打印语句判断配置是否成功
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Interceptor1 implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.print("prehandle---------");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.print("afterCompletion---------");
}
}
新建配置类
import com.bookstore.demo.controller.Interceptor1;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class Configurer extends WebMvcConfigurerAdapter{
//配置interceptor
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new Interceptor1()).addPathPatterns("/**");//设置拦截器的类并设置拦截路径
super.addInterceptors(registry);
}
//配置filter
@Bean
public FilterRegistrationBean getFilter(){
FilterRegistrationBean filterBean=new FilterRegistrationBean();
filterBean.setFilter(new TestFilter());
filterBean.addUrlPatterns("/*");//设置拦截路径
filterBean.setOrder(1);
return filterBean;
}
}
这样就算配置完成了,其中可以自行去查看InterceptorRegistry和FilterRegistrationBean,其中还有一些不太主要的方法