springMVC-学习总结-拦截器
来源:互联网 发布:电子板报设计软件 编辑:程序博客网 时间:2024/04/27 19:13
资料学习参考这里http://jinnianshilongnian.iteye.com/blog/1752171
springmvc拦截器
public interface HandlerInterceptor {boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception;void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception;}
preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现);返回值:true表示继续流程(如调用下一个拦截器或处理器); false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null;
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调;
如果我们不想实现全部的方法,只使用其中的部分方法,可以继续HandlerInterceptorAdapter(适配器模式)
public class MyInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// TODO Auto-generated method stubreturn super.preHandle(request, response, handler);}}
入门小程序
定义拦截器:
public class MyInterceptorOne implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {System.out.println("MyInterceptorOne===preHandle");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("MyInterceptorOne===postHandle");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("MyInterceptorOne===afterCompletion");}}MyInterceptorTwo同MyInterceptorOne,但是sysout需要修改;
配置文件:
<!-- 映射器 --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="myInterceptorOne"/><ref bean="myInterceptorTwo"/></list></property></bean> <!-- 适配器 --><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!-- 试图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean><!-- 处理器 --><bean name="/hello" class="springMVC.HelloWorldController"></bean><!-- 拦截器 --><bean id="myInterceptorOne" class="lee.springmvc.interceptor.MyInterceptorOne"></bean><bean id="myInterceptorTwo" class="lee.springmvc.interceptor.MyInterceptorTwo"></bean>
访问hello控制台输出如下:
MyInterceptorOne===preHandleMyInterceptorTwo===preHandleMyInterceptorTwo===postHandleMyInterceptorOne===postHandleMyInterceptorTwo===afterCompletionMyInterceptorOne===afterCompletion
public class LoginInterceptor extends HandlerInterceptorAdapter{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {//1、请求到登录页面 放行 if(request.getServletPath().startsWith("loginUrl")) { return true; } //2、比如退出、首页等页面无需登录 //3、如果用户已经登录 放行 if(request.getSession().getAttribute("username") != null) { //更好的实现方式的使用cookie return true; } //4、如果页面上某个按钮进行ajax请求后台数据。用户请求前,服务器突然关掉,之后服务器启动,用户正好点击按钮进行ajax后台请求 //此时应该进行重定向到登录页面,需要加上如下代码,否则页面不发送任何改变if("XMLHttpRequest".equals(request.getHeader("X-Requested-With")) && request.getSession().getAttribute("username") == null){//判断是否为ajax请求 PrintWriter out = response.getWriter();//如果是ajax请求,返回一个标识,告诉ajax请求无效,需要重新登录 out.print("login"); return false; } //5、非法请求 即这些请求需要登录后才能访问 //重定向到登录页面 response.sendRedirect(request.getContextPath() + "loginUrl"); return false; }}推荐能使用servlet规范中的过滤器Filte
0 0
- springMVC-学习总结-拦截器
- springmvc-学习总结-拦截器
- SpringMVC拦截器总结
- SpringMVC拦截器学习
- SpringMVC学习总结(五).拦截器的使用
- SpringMVC学习5 - 拦截器
- SpringMVC拦截器学习记录
- Springmvc学习(10)-拦截器
- 【SpringMVC学习11】SpringMVC中的拦截器
- 【SpringMVC学习11】SpringMVC中的拦截器
- 【SpringMVC学习09】SpringMVC中的拦截器
- SpringMVC 取消拦截总结
- [SpringMVC] SpringMVC拦截器
- SpringMVC 学习笔记(九) 自定义拦截器
- springmvc学习笔记(20)-拦截器
- SpringMVC 中的Interceptor 拦截器---学习笔记
- springmvc拦截器学习(一)
- springMVC学习笔记(八) ---- 拦截器
- C++读写注册表
- JAVA实现平衡树
- 【169】Majority Element
- [BZOJ1023][SHOI2008[Cactus仙人掌]][Tarjan+单调队列+树形DP]
- 搭建SVN服务器详细教程
- springMVC-学习总结-拦截器
- java求100之内的素数
- 操作系统基础:时间片轮转
- 安装mysql错误信息:cmake_symlink_library: System Error: Operation not supported
- Storm流计算的Component组件
- 二维数组 作为函数参数 传递方法
- 基于URL的权限管理学习总结
- Android:获取组件的宽和高
- 【LeetCode】46. Permutations