mvc配置文件
1.全部拦截
<!-- 使用bean定义一个Interceptor -->
<mvc:interceptors>
<!-- 直接定义在根下面的Interceptor拦截所有请求-->
<bean class="org.xxx.springmvc.interceptors.inter1"></bean>
</mvc:interceptors>
2.常用写法
<!-- 定义在 mvc:interceptor 下面 拦截所有test地址开头的请求-->
<mvc:interceptors>
<!-- preHandle根据执行顺序拦截
然后根据顺序的 post和after-->
<mvc:interceptor>
<!-- mvc:mapping 配置拦截器拦截资源 支持通配符 /** -->
<!-- mvc:exclude-mapping 配置拦截器放行的资源 可以多个-->
<mvc:mapping path="/test/*.do"/>
<mvc:exclude-mapping path="/m01.do"/>
<bean class="org.xxx.springmvc.interceptors.inter1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="org.xxx.springmvc.interceptors.inter2"></bean>
</mvc:interceptor>
</mvc:interceptors>
实现方法
1.实现HandlerInterceptor接口
/**
* SpringMVC中的Interceptor拦截器
* 它的主要作用是拦截用户的请求并进行相应的处理。
* 对于springmvC拦截器的定义方式有两种方式
* 1.实现HandlerInterceptor接口类
*
*/
public class inter1 implements HandlerInterceptor {
//拦截器执行之前
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("pre");
/**
* true:继续执行
* false:阻止
*/
return true;
}
//拦截器Handler执行后 ,view生成前
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("post");
}
//view生成后
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("after");
}
}
2.实现HandlerInterceptorAdapter接口
public class inter2 extends HandlerInterceptorAdapter {
public inter2() {
super();
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
super.afterConcurrentHandlingStarted(request, response, handler);
}
}
应用
1.控制层
@Controller
public class UserController {
@RequestMapping("user/login")
public ModelAndView userLogin(HttpSession session){
ModelAndView mv=new ModelAndView();
System.out.println("user login");
User user=new User();
user.setId(10);
user.setUserName("admin");
session.setAttribute("userInfo",user);
mv.setViewName("success");
return mv;
}
@RequestMapping("user/regsiter")
public ModelAndView userRegsier(){
ModelAndView mv=new ModelAndView();
mv.setViewName("success");
return mv;
}
@RequestMapping("user/delete")
public ModelAndView userDelete(){
ModelAndView mv=new ModelAndView();
mv.setViewName("success");
return mv;
}
}
2.interator层
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/**
* 获取session
* 存在则放行
*/
User user=(User) request.getSession().getAttribute("userInfo");
if(user == null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
return true;
}