SpringMVC拦截器
使用步骤
1.自定义拦截器 需要实现 HandlerInteceptor接口。
package com.edu.Intercepter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginLntercepter implements HandlerInterceptor {
/*在执行Controller方法前拦截,判断用户是否已经登录,
登录了就放行,还没登录就重定向到登录页面*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if (user==null){
// 还没有登录,重定向 登录页面
System.out.println("小白同学你还没有登录哦~~~~~~~~~~~~~");
response.sendRedirect(request.getContextPath()+"/login");
return false;
}
//已经登陆,放行
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("在处理器 方法执行完之后,视图渲染之前 执行。preHandle返回true才执行");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("在视图渲染完毕之后执行,一旦之前的过程中出现异常,会直接执行 afterCompletion。preHandle返回true才执行");
}
}
2.拦截器注册(spring-mvc)
<mvc:interceptors>
<mvc:interceptor>
<!-- mvc:mapping:拦截的路径
/**:是指所有文件夹及其子孙文件夹
/*:是指所有文件夹,但不包含子孙文件夹
/:Web项目的根目录-->
<mvc:mapping path="/**"/>
<!--
mvc:exclude-mapping:不拦截的路径,不拦截登录路径
/toLogin:跳转到登录页面
/login:登录操作
-->
<mvc:exclude-mapping path="/css/**"/>
<mvc:exclude-mapping path="/img/**"/>
<mvc:exclude-mapping path="/js/**"/>
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/dologin"/>
<!-- 拦截器的类型 -class属性就是我们自定义的拦截器 -->
<bean class="com.edu.Intercepter.LoginLntercepter" id="loginInterceptor"></bean>
</mvc:interceptor>
<!--如果还有其他拦截器,那么还是按照上面的拦截器配置-->
</mvc:interceptors>