我正在实现一个小型的spring boot camel网关,可以动态管理路由。 路由也可以是安全的或不安全的,如果安全,负责的处理器可以选择如何授权来电。我们希望支持CAS,OIDC和OAUTH2,并且暂时不使用Spring Security或Shiro。
动态添加路由的示例:
if(api.isSecured()) {
from("direct:" + api.getContext() + path.getPath() + "-" + path.getVerb())
.streamCaching()
.process(authProcessor)
.choice()
.when(simple("${in.headers.VALID} == true"))
.toF(Constants.REST_ENDPOINT_OBJECT, (api.getEndpoint() + path.getPath()))
.convertBodyTo(String.class)
.otherwise()
.toF(Constants.FAIL_REST_ENDPOINT_OBJECT, apiGatewayErrorEndpoint)
.convertBodyTo(String.class)
.end()
} else {
from("direct:" + api.getContext() + path.getPath() + "-" + path.getVerb())
.streamCaching()
.toF(Constants.REST_ENDPOINT_OBJECT, (api.getEndpoint() + path.getPath()))
.convertBodyTo(String.class)
.end()
}
如果API是安全的,我会致电处理器,以检查可用的授权。
@Autowired
AuthProvider authProvider;
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("VALID", false);
if(exchange.getIn().getHeader("Authorization") != null) {
String token = exchange.getIn().getHeader("Authorization").toString();
try {
authProvider.validate(token);
exchange.getIn().setHeader("VALID", true);
} catch(Exception e) {
log.info("Unable to decode the token");
}
}
}
由于,如上所述,我们需要支持多个授权提供者,因此在此处理器中,将使用正确的注入的auth提供者来验证令牌,如果令牌(jwt或opaque)无效,则返回异常。 / p>
在Camel中是否有支持多个授权提供者的标准方法?