zoukankan      html  css  js  c++  java
  • springMVC 拦截器简单配置

    在spring 3.0甚础上,起来越多的用到了注解,从前的拦截器在配置文件中需要这样配置

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <beans...>  
    2.     ...  
    3.     <bean id="measurementInterceptor"   
    4.         class="com.apress.springrecipes.court.web.MeasurementInterceptor"/>  
    5.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
    6.         <property name="interceptors">  
    7.             <list>  
    8.                 <ref bean="measurementInterceptor"/>  
    9.             </list>  
    10.         </property>  
    11.         ...  
    12.     </bean>  
    13.     <bean class="org.springframework.web.servlet.mvc.support  
    14.         .ControllerClassNameHandlerMapping">  
    15.         <property name="interceptors">  
    16.             <list>  
    17.                 <ref bean="measurementInterceptor"/>  
    18.             </list>  
    19.         </property>  
    20.     </bean>  
    21.     ....  
    22. </beans>  


    现在用注解只需要这样:

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <mvc:interceptors>  
    2.         <mvc:interceptor>  
    3.             <mvc:mapping path="/*/*.shtml"/>//映射路径后缀名  
    4.             <bean class="x.x.x.filter.SessionFilter"/>//自定义拦截器  
    5.         </mvc:interceptor>  
    6.     </mvc:interceptors>  

    SessionFilter.java代码:

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class SessionFilter implements HandlerInterceptor {  
    2.   
    3.     @Override  
    4.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {  
    5.       //  后台session控制  
    6.         Object user=request.getSession().getAttribute("username");  
    7.         String returnUrl = request.getRequestURI();  
    8.         if(null==user){  
    9.             if(returnUrl.equals("/public/getImg.shtml")||returnUrl.equals("/public/checkLogin.shtml")||returnUrl.equals("/public/login.shtml")||returnUrl.equals("/public/logOut.shtml")){  
    10.                 return true;  
    11.             }else{  
    12.                 response.setContentType("text/html");  
    13.                 response.setCharacterEncoding("utf-8");  
    14.                 PrintWriter out = response.getWriter();    
    15.                 StringBuilder builder = new StringBuilder();    
    16.                 builder.append("<script type="text/javascript" charset="UTF-8">");    
    17.                 builder.append("alert("请重新登陆!");");    
    18.                 builder.append("window.location.href="/public/login.shtml";");    
    19.                 builder.append("</script>");    
    20.                 out.print(builder.toString());    
    21.                 out.close();    
    22.                 return false;  
    23.             }  
    24.         }  
    25.         return true;  
    26.     }  
    27.   
    28.     @Override  
    29.     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {  
    30.           
    31.     }  
    32.   
    33.     @Override  
    34.     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse response, Object o, Exception e) throws Exception {  
    35.           
    36.     }  
    37.   
    38.   
    39.     /**  
    40.      * @param request  
    41.      * @return Create Date:2013-6-5  
    42.      * @author Shine  
    43.      * Description:获取IP  
    44.      */  
    45.     private String getIpAddr(HttpServletRequest request) {  
    46.         String ip = request.getHeader("x-forwarded-for");  
    47.         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    48.             ip = request.getHeader("Proxy-Client-IP");  
    49.         }  
    50.         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    51.             ip = request.getHeader("WL-Proxy-Client-IP");  
    52.         }  
    53.         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    54.             ip = request.getRemoteAddr();  
    55.         }  
    56.         return ip;  
    57.     }  
    58. }  

    这个拦截器的目的就是:用户所属的session不存在后进行对控制器请求的拦截,使跳转到首页。对于HandlerInterceptor这个类这里不多说,网上有的可能说的更好,这里只简单说下它的三个方法,preHandle、postHandle和afterCompletion。

    (1 )preHandle(WebRequest request) 方法。该方法将在请求处理之前进行调用,也就是说会在Controller 方法调用之前被调用。这个方法跟HandlerInterceptor 中的preHandle 是不同的,主要区别在于该方法的返回值是void ,也就是没有返回值,所以我们一般主要用它来进行资源的准备工作,比如我们在使用Hibernate 的时候可以在这个方法中准备一个Hibernate 的Session 对象,然后利用WebRequest 的setAttribute(name, value, scope)把它放到WebRequest 的属性中。这里可以说说这个setAttribute 方法的第三个参数scope ,该参数是一个Integer类型的。在WebRequest 的父层接口RequestAttributes 中对它定义了三个常量:

       SCOPE_REQUEST :它的值是0 ,代表只有在request 中可以访问。

       SCOPE_SESSION :它的值是1 ,如果环境允许的话它代表的是一个局部的隔离的session,否则就代表普通的session,并且在该session范围内可以访问。

       SCOPE_GLOBAL_SESSION :它的值是2 ,如果环境允许的话,它代表的是一个全局共享的session,否则就代表普通的session,并且在该session 范围内可以访问。

       (2 )postHandle(WebRequest request, ModelMap model) 方法。该方法将在请求处理之后,也就是在Controller 方法调用之后被调用,但是会在视图返回被渲染之前被调用,所以可以在这个方法里面通过改变数据模型ModelMap 来改变数据的展示。该方法有两个参数,WebRequest 对象是用于传递整个请求数据的,比如在preHandle 中准备的数据都可以通过WebRequest 来传递和访问;ModelMap 就是Controller 处理之后返回的Model 对象,我们可以通过改变它的属性来改变返回的Model 模型。

       (3 )afterCompletion(WebRequest request, Exception ex) 方法。该方法会在整个请求处理完成,也就是在视图返回并被渲染之后执行。所以在该方法中可以进行资源的释放操作。而WebRequest 参数就可以把我们在preHandle 中准备的资源传递到这里进行释放。Exception 参数表示的是当前请求的异常对象,如果在Controller中抛出的异常已经被Spring 的异常处理器给处理了的话,那么这个异常对象就是是null 。

    参考:http://haohaoxuexi.iteye.com/blog/1750680

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/yhtboke/p/5796195.html
Copyright © 2011-2022 走看看