SpringMvc框架配置过滤器
本文以简单的登录过滤器为例
开发环境
- jdk 8
- idea2019.3.5
- maven 3.6.3
- spring-webmvc 5.1.9.RELEASE
- web.xml 4.0
- ajax 3.5.1
一. 编写过滤器配置类
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
// 放行: 判断什么情况下登录
// 登录页面也会放行
if (request.getRequestURI().contains("toLogin")) {
return true;
}
//说明在提交登录
if (request.getRequestURI().contains("login")) {
return true;
}
// 第一次登录也是没有session的
if (session.getAttribute("userLoginInfo") != null) {
return true;
}
// 列出什么情况下妹遇登录
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
二. 配置手写的过滤器到applicationContext.xml
<!--拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<!--自定义过滤器 过滤/user请求路径下面所有请求-->
<mvc:mapping path="/user/**"/>
<bean class="com.suncp.config.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
ps: 该appicationContext.xml配置需要配置到web.xml中, 配置如下:
<!--web.xml中的配置,不要完全拷贝,只为备注,无参考价值-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
demo源码码云地址 : https://gitee.com/suncp/spring-mvc-ajax
参考:
- B站狂神说springMVC视频: https://www.bilibili.com/video/BV1aE41167Tu
- 以及中间踩坑的各大神博客,在次致谢!