springmvc.xml配置
<!-- SPringmvc的拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器 -->
<mvc:interceptor>
<!-- path="/**"/ 拦截所有 在类里处理不需要拦截即放行 -->
<mvc:mapping path="/**"/>
<!-- 自定义的拦截器类 -->
<bean class="com.itheima.springmvc.interceptor.Interceptor1"/>
</mvc:interceptor>
<!-- <mvc:interceptor>
<mvc:mapping path="/**"/>
自定义的拦截器类
<bean class="com.itheima.springmvc.interceptor.Interceptor2"/>
</mvc:interceptor> -->
</mvc:interceptors>
多个拦截起情况会复杂
单个
用户-> 拦截器( 三个方法 ***方法前*** 方法后 页面渲染后)-> controller -> 拦截器( 三个方法 方法前 ***方法后*** 页面渲染后)-> 视图解析器 (jsp 转化html)-> 拦截器( 三个方法 方法前 方法后 ***页面渲染后***)->用户
多个
1、全部通过
方法前1
方法前2
方法后2
方法后1
页面渲染后2
页面渲染后1
2、拦截器1拒绝 2通过
方法前1
方法前2
2、拦截器1通过 2拒绝
方法前1
方法前2
页面渲染后1
拦截类
// true 放行 false 不放行
public class Interceptor1 implements HandlerInterceptor{
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("方法前 1");
//判断用户是否登陆 如果没有登陆 重定向到登陆页面 不放行 如果登陆了 就放行了
// URL http://localhost:8080/springmvc-mybatis/login.action
//URI /login.action
String requestURI = request.getRequestURI();
// 不是登录的情况不放行要先校验
if(!requestURI.contains("/login")){
// 判断是哪个项目 ----------------------在此是否可以实现单站点登录
String username = (String) request.getSession().getAttribute("USER_SESSION");
if(null == username){
// 跳转到其他的页面 。比如不同项目的不同页面
response.sendRedirect(request.getContextPath() + "/login.action");
return false;
}
}
return true;
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("方法后 1");
}
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("页面渲染后 1");
}
}
preHandle、 postHandle 、 afterCompletion暂时用前端的思想理解为生命钩子哈(准不准确就不管了,好理解就行)