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>