一、入門
客戶端發起請求進入DispatcherServlet,再進入我們自定義的攔截器,攔截器實現的是HandlerIntercepter接口,如果攔截成功,就向客服端返回攔截器響應信息;
如果驗證通過,就進入對應的controller,然后結果一系列操作,返回controller響應信息
(二)、 SpringMVC攔截器配置及類初始化
在dispatcher-servlet.xml文件設置mvc攔截器
<mvc:interceptors> <!-- 定義在這里,所有的都會攔截--> <!-- <bean></bean>--> <mvc:interceptor> <!----> <mvc:mapping path="/manage/**"/> <!--指定攔截器初始化類--> <bean class="com.mmall.controller.common.interceptor.AuthorityInterceptor"/> </mvc:interceptor> </mvc:interceptors>
創建攔截器初始化類AuthorityInterceptor
package com.mmall.controller.common.interceptor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Iterator; import java.util.Map; // 攔截器初始化類 @Slf4j public class AuthorityInterceptor implements HandlerInterceptor { // controller處理之前 @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { log.info("preHandle"); // 請求中Controller中的方法名 HandlerMethod handlerMethod = (HandlerMethod) o; // 解析handlerMethod String methodName = handlerMethod.getMethod().getName(); String className = handlerMethod.getBean().getClass().getSimpleName(); //解析參數,具體的參數key以及value是什么,我們打印日志 StringBuffer requestParamBuffer = new StringBuffer(); Map paramMap = httpServletRequest.getParameterMap(); Iterator it = paramMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String mapKey = (String) entry.getKey(); String mapValue = StringUtils.EMPTY; // httpServletRequest這個參數的map,里面的value返回的是一個String[] Object obj = entry.getValue(); if (obj instanceof String[]) { String[] strs = (String[])obj; mapValue = Arrays.toString(strs); } requestParamBuffer.append(mapKey).append("=").append(mapValue); } // 還沒有寫完 return true; } // controller 處理之后 @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { log.info("postHandle"); } // 所有處理完成后調用 @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { log.info("afterCompletion"); } }