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>

 

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