7.4. 路由策略
Camel 支持 RoutePolicies 的概念,可用于与 JBoss EAP 安全系统集成。目前有两种安全集成的场景。
7.4.1. Camel 调用 to interaction
当 camel 路由调用一个 secured>=< 组件时,它充当客户端,并且必须提供与调用关联的适当凭据。
您可以使用 ClientAuthorizationPolicy
分离路由,如下所示:
CamelContext camelctx = new DefaultCamelContext(); camelctx.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start") .policy(new ClientAuthorizationPolicy()) .to("ejb:java:module/AnnotatedSLSB?method=doSelected"); } });
这不作为 camel 消息处理的一部分,不执行任何身份验证和授权。相反,它会将与 Camel Exchange 附带的凭据与 EJB3 层的调用相关联。
调用消息消费者的客户端必须在 AUTHENTICATION 标头中提供适当的凭证,如下所示:
ProducerTemplate producer = camelctx.createProducerTemplate(); Subject subject = new Subject(); subject.getPrincipals().add(new DomainPrincipal(domain)); subject.getPrincipals().add(new EncodedUsernamePasswordPrincipal(username, password)); producer.requestBodyAndHeader("direct:start", "Kermit", Exchange.AUTHENTICATION, subject, String.class);
身份验证和授权将在 implementations 层中进行。
7.4.2. 保护 Camel 路由
为了保护 Camel 路由,您可以将 DomainAuthorizationPolicy
与路由关联。此策略需要针对给定安全域成功进行身份验证,并为 "Role2" 授权。
CamelContext camelctx = new DefaultCamelContext(); camelctx.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start") .policy(new DomainAuthorizationPolicy().roles("Role2")) .transform(body().prepend("Hello ")); } }); camelctx.start();
同样,调用消息消费者的客户端必须在 AUTHENTICATION 标头中提供适当的凭证,如下所示:
ProducerTemplate producer = camelctx.createProducerTemplate(); Subject subject = new Subject(); subject.getPrincipals().add(new DomainPrincipal(domain)); subject.getPrincipals().add(new EncodedUsernamePasswordPrincipal(username, password)); producer.requestBodyAndHeader("direct:start", "Kermit", Exchange.AUTHENTICATION, subject, String.class);