Apache Camel - 调用 http 或 rest 调用(通过 Shiro Security 过滤)

Posted

技术标签:

【中文标题】Apache Camel - 调用 http 或 rest 调用(通过 Shiro Security 过滤)【英文标题】:Apache Camel - Invoking http or rest calls (filtered through Shiro Security) 【发布时间】:2014-02-26 21:06:43 【问题描述】:

需要一些建议来确定它是否可以在 Camel 中用于以下场景。

我们正在尝试使用 Apache Camel 对 Web 应用程序进行集成测试。应用程序必须通过休息服务调用访问。每个应用程序请求都通过 shiro 安全过滤。当我对这个应用程序进行restful调用或http调用时,我需要在header中设置必要的shiro认证信息,并确保camel请求处理成功。有没有办法在骆驼中做到这一点-“调用http或rest调用来访问其请求由apache shiro保护的应用程序”?我看到 Camel 有一个 shiro 安全组件,它更像是授权骆驼路线或定义骆驼路线的安全性,我看不出我可以将它们用于此目的吗?

我确实尝试以不同的可能方式在标头中设置 shiro 身份验证令牌(例如:使用 Exchange 的身份验证属性),但它不起作用。请问有什么建议吗?

更新: Shiro 维护自己的会话并查找 userId 和他/她的权限(称为 Shiro 主题)以确保其是经过身份验证和授权的请求。每当我们向 Shiro 安全应用程序发送请求时,它会过滤请求,验证请求以确定其是否有权访问应用程序功能,然后允许我们进入。如果 Shiro 会话中没有用户信息,它将带您进入登录屏幕。我们的 Web 应用程序已将功能公开为 REST 服务。在 Camel 中调用这样一个嵌入了 Apache Shiro 安全性的应用程序是否可行?基本上我应该模拟 Shiro 主题并在 HTTP 标头中设置以使其看起来像 Shiro Authenticated 请求。

我尝试使用在交换标头中设置的 Shiro 身份验证令牌进行 http 调用。但它失败了。这在骆驼中是可能的还是我走错了方向?非常感谢您在这方面的任何建议或帮助。下面是我一直在玩的代码子集。

// 将其包装在主题中

Subject subjectUnderTest = new Subject.Builder(getSecurityManager())
        .principals(new SimplePrincipalCollection("Username", "RealmName")).authenticated(true).buildSubject();    

MockEndpoint OutEndpoint = getMockEndpoint("mock.out");

OutEndpoint.expectedMessageCount(1);

Endpoint InEndpoint = context.getEndpoint("direct.in");


Map<String, Object> headers = new HashMap<String, Object>();

headers.put(Exchange.HTTP_METHOD, "GET");

headers.put(Exchange.AUTHENTICATION, subjectUnderTest);

template.sendBodyAndHeaders(InEndpoint, "test body", headers);

谢谢维吉

【问题讨论】:

通常您可以在 Camel 交换中设置您喜欢的任何标头,该标头将作为 HTTP 标头随您的请求一起发送。通过 Shiro 进行身份验证的确切要求是什么? 我已经添加了我在应用程序中尝试执行的操作的更新。 【参考方案1】:

我认为您应该使用以下代码来设置用户名和密码。使用这些配置设置 CamelContext。

HttpConfiguration config = new HttpConfiguration();
config.setAuthMethod(AuthMethod.Basic);
config.setAuthUsername("donald");
config.setAuthPassword("duck");
HttpComponent http = context.getComponent("http", HttpComponent.class);
http.setHttpConfiguration(config);

【讨论】:

以上是关于Apache Camel - 调用 http 或 rest 调用(通过 Shiro Security 过滤)的主要内容,如果未能解决你的问题,请参考以下文章

使用状态码 405 获取 org.apache.camel.component.http.HttpOperationFailedException

Apache Camel - Spring 休息端点参考

如何在apache camel DSL或camel Processor内部设置其他身份验证属性?

apache camel hazelcast获取自定义标题

[每日一学]apache camel简介

Apache Camel端点注入直接路由“端点上没有可用的消费者”