我正在使用最新的 Apache CXF 创建 Web 服务。我已经使用org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor
. 在我的passwordCallbackClass
我可以通过调用类的getIdentifier()
方法来访问用户或标识符org.apache.ws.security.WSPasswordCallback
。
我也在整个设置中使用弹簧。
我想知道如何在代码中的其他任何地方访问标识符?我可以考虑ThreadLocal
在我的passwordCallbackClass
? 另一种方法是在我的所有服务方法参数中定义标识符属性,但这意味着客户端需要传递标识符两次,一次在安全块中,另一次在服务调用中?
编辑
我的服务类看起来像这样,我需要在sayHi
方法中读取标识符。
@WebService(endpointInterface = "com.webservice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
return "Hello " + text;
}
}
我的密码回调方法是我可以获得标识符的地方。
public void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackExceptio {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.getIdentifier();
}