1. 程式人生 > >Sping攔截器配置例外路徑

Sping攔截器配置例外路徑

思路:通過全域性引數,選擇性的跳過攔截器邏輯。

web.xml中配置:

<!-- 攔截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 對所有的請求攔截使用/** ,對某個模組下的請求攔截使用:/myPath/* -->
            <mvc:mapping path="/**" />
            <ref bean="userAccessInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
 
    <bean id="userAccessInterceptor"
        class="com.kye.interceptor.UserAccessApiInterceptor">
            <span style="color:#FF0000;"><property name="unUAInterLists" >
            	<list>
            		<value>/S/*</value>
            	</list>
            </property></span>
    </bean>
	
	
	
	<!-- 解密攔截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 對登入的請求攔截 /Login-->
            <mvc:mapping path="/S/*" />
            <ref bean="userSecurity" />
        </mvc:interceptor>
    </mvc:interceptors>
 
    <bean id="userSecurity"
        class="com.kye.interceptor.UserSecurity">
    </bean>

在原始攔截器中增加實體類的全域性引數;對例外的路徑增加攔截器。

UserAccessApiInterceptor類中增加例外的跳出邏輯:

public class UserAccessApiInterceptor extends HandlerInterceptorAdapter{
    private Logger log = Logger.getLogger(this.getClass());
    /**
     * 免登入 免檢查地址
     */
    private List<String> unUAInterLists;


    public List<String> getUnUAInterLists() {
        return unUAInterLists;
    }

    public void setUnUAInterLists(List<String> unUAInterLists) {
        this.unUAInterLists = unUAInterLists;
    }


    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        // 20160511 增加例外地址,例外地址跳出
        String servletPath = request.getRequestURI();
        for (String string : unUAInterLists) {
            // 如果存在 後方的萬用字元,那麼匹配地址的前部分
            int beginId = string.indexOf(SecurityUtil.WIL_CHAR);
            if (beginId >= 0 && servletPath.startsWith(request.getContextPath() + string.substring(0, beginId))) {
                return true;
            }
        }

/**

攔截邏輯

*/

       return true;
    }

}

例外連結的攔截器正常邏輯即可。