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

时间:2014-02-03 11:35:56

标签: rest apache-camel shiro

需要一些建议,以确定在Camel中是否可能出现以下情况。

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

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

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

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

//将其包装在主题

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);

谢谢Viggy

1 个答案:

答案 0 :(得分:0)

我认为您应该使用以下代码来设置用户名和密码。使用这些配置设置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);