拦截器有两种实现方式:implements HandlerInterceptor,还有一种是继承自一个类,这里先不说。
自己写的登陆session拦截
package com.sand.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor{
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("after");
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
System.out.println("post");
}
/**
* 在业务处理器处理请求之前被调用
* 如果返回false
* 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
*
* 如果返回true
* 执行下一个拦截器,直到所有的拦截器都执行完毕
* 再执行被拦截的Controller
* 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle()
* 接着再从最后一个拦截器往回执行所有的afterCompletion()
*
* 如果在拦截器中的prehandler中返回false,则根本不会渲染到view层了,
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("pre");
String userName = (String)request.getSession().getAttribute("userName");
if(userName == null){
return false;
}
return true;
}
}
配置文件:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/login/*"/>
<bean id="loginInter" class="com.sand.web.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
注意:这里path必须是到文件的路径,你要写成path="/*",如果你的访问路径全是/login/check之类的二级路径,那么对不起,拦截器不执行,想对所有拦截要写“/**”或者"/*/*"