Zuul中使用interceptor攔截器

package com.mortals.iot.module.common;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter;
import org.springframework.cloud.netflix.zuul.web.ZuulHandlerMapping;
import org.springframework.context.annotation.Configuration;

/**
 * Zuul中適配Interceptor攔截器
 */
@Configuration
//@RequiredArgsConstructor
public class ZuulHandlerBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter {

//    @NonNull
    //這個是自定義的攔截器
    private final AuthJsonInterceptor myInterceptor;

    public ZuulHandlerBeanPostProcessor(AuthJsonInterceptor myInterceptor) {
        this.myInterceptor = myInterceptor;
    }

    @Override
    public boolean postProcessAfterInstantiation(final Object bean, final String beanName) throws BeansException {

//        System.out.println("進入:InstantiationAwareBeanPostProcessorAdapter");
        if (bean instanceof ZuulHandlerMapping) {
            System.out.println("|||||||||||||"+beanName);
            ZuulHandlerMapping zuulHandlerMapping = (ZuulHandlerMapping) bean;
            zuulHandlerMapping.setInterceptors(myInterceptor);
        }

        return super.postProcessAfterInstantiation(bean, beanName);
    }

}

原文地址

這個針對路由的url可以起攔截作用,但是我原本的Controller缺不受此攔截器控制

所以打算通過切面控制權限入手。

 

通過下面配置全局攔截器(SpringMVC配置模式)是起作用了的:

如下攔截器,既能攔截自定義Controller,又能攔截Zuul路由的請求(底層是ZuulController)

	<!--攔截器配置-->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<mvc:exclude-mapping path="/opa/login"/>
			<bean class="com.mortals.iot.module.common.AuthJsonInterceptor"/>
		</mvc:interceptor>
	</mvc:interceptors>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章