- 定义拦截器
public class MyInter implements HandlerInterceptor{
//主要逻辑:在handler之前执⾏:抽取handler中的冗余代码
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("pre~~~");
HttpSession session = request.getSession();
if(session.getAttribute("state")!=null){
return true;//放⾏
}
response.sendRedirect("/longin.jsp");//响应
return false;//中断请求
}
//在handler之后执⾏:进⼀步的响应定制
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("post~~");
}
//在⻚⾯渲染完毕之后,执⾏:资源回收
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("after");
}
}
- 定义Controller
@Controller
@RequestMapping("/inter")
@SessionAttributes("state")
public class InterController{
@RequestMapping("/login")
public String login(Model model){
model.addAttribute("state","ok");
return "index";
}
@RequestMapping("/test1")
public String login(Model model){
return "index";
}
@RequestMapping("/test2")
public String login(Model model){
return "index";
}
}
- 配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/inter/test1"/>
<mvc:mapping path="/inter/test2"/>
<!-- <mvc:mapping path="/inter/test*"/> --> <!--/inter/testaa /inter/test22 /inter/testssssss -->
<!-- <mvc:mapping path="/inter/**"/> --> <!-- /inter/a/b/c/d /inter/cc/ss/dfd -->
<!-- <mvc:exclude-mapping path="/inter/login"/> --> <!-- 不拦截此路径 -->
<bean class="com.baizhi.interceptor.MyInter1"></bean> <!-- 拦截器类 -->
</mvc:interceptor>
</mvc:interceptors>
当没登录的情况下***state***是null,这是访问/test1和/test2会被拦截到登录页面;