在将WSSecurityPolicy与CXF callbackHandlers一起使用时,如何存储请求者标识,

时间:2014-07-08 19:55:26

标签: java cxf apache-camel ws-security

当使用CallBackHandler(从javax.security.auth.callback.CallbackHandler实现)来验证UsernameToken时,如何存储请求者的身份以供以后使用?

我的用例是用户A请求method1并接收特定于用户A的数据。用户B请求method1并接收特定于用户B的数据。

我在返回响应之前使用camel处理请求,但我需要能够跟踪请求者是谁。

1 个答案:

答案 0 :(得分:1)

您应该可以使用Exchange.AUTHENTICATION的键来查找主题。打击代码向您显示camel如何将来自cxf消息的UserPrincipal存储到camel消息头。

    // propagate the security subject from CXF security context
    SecurityContext securityContext = cxfMessage.get(SecurityContext.class);
    if (securityContext != null && securityContext.getUserPrincipal() != null) {
        Subject subject = new Subject();
        subject.getPrincipals().add(securityContext.getUserPrincipal());
        camelExchange.getIn().getHeaders().put(Exchange.AUTHENTICATION, subject);
    }