SpringMVC 攔截器實現權限統一校驗


一、入門

 

 

 

 客戶端發起請求進入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");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM