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>