spring拦截器

来源:互联网 发布:淘宝中老年衣服 编辑:程序博客网 时间:2024/06/15 03:33

  1.自定义拦截器    

   SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法。preHandle在业务处理器处理请求之前被调用,
    postHandle在业务处理器处理请求执行完成后,生成视图之前执行,afterCompletion在DispatcherServlet完全处 理完请求后被调用,可用于清理资源等 。所以要想实现自己的权限管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。
    首先在springmvc.xml中加入自己定义的拦截器我的实现逻辑CommonInterceptor

--配置springMVC拦截器, 多个拦截器,顺序执行 --><mvc:interceptors>    <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 -->    <!--<bean class=""></bean>-->    <mvc:interceptor>        <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->        <mvc:mapping path="/api/**" />        <bean class="com.jason.system.CommonInterceptor"/>    </mvc:interceptor>    <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --></mvc:interceptors>

4、最后实现类:CommonInterceptor

package com.jason.system;import com.jason.utils.date.DateUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/**公共拦截器 * Created by liupu on 2015/10/26. */public class CommonInterceptor implements HandlerInterceptor {    private  static final Logger logger= LoggerFactory.getLogger(CommonInterceptor.class);    /**     * 在请求之前拦截,返回true则进入请求Controller     * @param request     * @param response     * @return     * @throws Exception     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {        logger.info("==============执行顺序: 1、preHandle================");        String requestUri = request.getRequestURI();        String method = request.getMethod();        String url = request.getContextPath();        logger.info("RequestUri:"+requestUri);        logger.info("method:"+method);        logger.info("url:"+url);//       String username =  (String)request.getSession().getAttribute("user");//        if(username == null){//            request.getRequestDispatcher("/tool/login/login.jsp").forward(request, response);//            return false;//        }else{return true;}        return true;    }    /**     * 在业务处理器处理请求执行完成后,在返回试图前拦截,     * 可在modelAndView中加入数据,比如当前时间     * @param response     * @param request     * @param modelAndView     * @throws Exception     */    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {        logger.info("==============执行顺序: 2、postHandle================");        if (null!=modelAndView){            modelAndView.addObject("serverTime", DateUtils.getDate(DateUtils.YYYY_MM_DD_HH_mm_ss));        }    }    /**     * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等     * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()     * @param request     * @param response     * @param e     * @throws Exception     */    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {        logger.info("==============执行顺序: 3、afterCompletion================");    }}

原创粉丝点击