拦截器
自定义拦截器必须实现HandlerInterceptor接口
作用就是拦截用户的url请求, 并在执行handler方法的前中后加入某些特殊请求
步骤:
- 实现接口
- 配置springmvc.xml
1.实现HandlerInterceptor接口
package edu.gxcme.ssm.interceptor;
public class LoginInterceptor implements HandlerInterceptor{
//hendler方法之后运行
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
//在hendler方法执行中,返回ModelAndView之前
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
//在hendler方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
HttpSession session = request.getSession();
//判断用户是否登录
String userName = (String) session.getAttribute("userName");
if(userName!=null) {
//用户已经登录,请求通过
return true;
}
//用户没登录,重定向到主页
request.getRequestDispatcher("/index.jsp").forward(request, response);
return false;
}
}
注意点在于 preHandle 方法,返回true 的话url请求继续,反之被拦截
2.配置springmvc.xml
记得加两个*号,匹配其后面所有
<mvc:interceptors>
<mvc:interceptor>
<!-- 要拦截的url请求 -->
<mvc:mapping path="/emp/**" />
<!-- 拦截器位置 -->
<bean class="edu.gxcme.ssm.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
受拦截保护的Controller
@Controller
@RequestMapping("/emp")
public class EmployeeController {
//...
}
总结:用户请求emp下的所有方法时,会被拦截,根据结果判断是否通行