一、applicationContext.xml配置文件配置
<!-- 拦截器的配置 -->
<mvc:interceptors>
<!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根
下面的Interceptor将拦截所有的请求 -->
<mvc:interceptor>
<!-- 进行拦截:/**表示拦截所有controller -->
<mvc:mapping path="/**" />
<!--
不进行拦截 ,填写不拦截的路径,该路径不进行拦截
<mvc:mapping path=""/>
-->
<!-- 处理拦截器的具体实现类,写类的全路径 -->
<bean class="com.intercepter.LoginIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
二、controller层代码编写
/**
- 登录拦截器,只拦截controller,不拦截静态资源
- @author Admin
*/
public class LoginIntercepter implements HandlerInterceptor{
// 进入控制器方法之前执行
// 用于生分验证、生分授权
// 比如身份认证,如果认证不通过表示当前用户没有登录,需要此方法在controller之前进行拦截
// 不再像下执行
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 取得当前请求的url
String url = request.getRequestURI();
System.out.println(“url:”+url);
// 如果是登录请求,就不拦截
if(url.indexOf(“login”)>0){
return true;
}
// 取得session中的数据
HttpSession session=request.getSession();
String u=(String) session.getAttribute(“userName”);
// 如果用户已经登录,不拦截
if(u!=null){
return true;
}
// 执行到这里,表名身份需要进行验证,跳转到登录页面,利用请求转发进行页面的跳转
request.getRequestDispatcher(“login.jsp”).forward(request, response);
return false;
}
// 进入控制器方法之后,返回modelandView之前执行
// 应用场景从modelAndView出发,将公共模型的数据(比如菜单导航)在这里传到视图,
// 也可以在这里统一指定视图
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println(“进入控制器方法之后,返回modelandView之前执行”);
}
// 执行控制器完成此方法
// 应用场景:统一事务处理,统一日志处理
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println(“应用场景:统一事务处理,统一日志处理”);
}
}