質問

私は、Webサービスを作成するために、最新のApache CXFを使用しています。私はorg.apache.cxf.ws.security.wss4j.WSS4JInInterceptorを使用してのWS-Securityを設定しています。私のpasswordCallbackClassでは、私はgetIdentifier()クラスのorg.apache.ws.security.WSPasswordCallbackメソッドを呼び出すことにより、ユーザーまたは識別子にアクセスすることができます。

私はまた、全体のセットアップのためのバネを使用しています。

私は、コード内の任意の場所を他の識別子にアクセスする方法を知りたいのですが?私は私のThreadLocalpasswordCallbackClassを使用して考えることができますか?もう一つの方法は、すべての私のサービスメソッドのパラメータの識別子プロパティに定義されているが、それは1セキュリティブロック内と再びサービスコールでは、二度の識別子を渡す必要があるクライアントを意味するのでしょうか?


編集

私のサービスクラスは次のようになりますし、私は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();  
}
役に立ちましたか?

解決

私は、識別子を保存するために、私のパスワードのコールバックメソッドでのThreadLocalを使用しました。私は、識別子を知るために、コード内のどこにThreadLocalにアクセスします。

他のヒント

「のコード内の任意の場所を他に」定義?あなたは、他のインターセプタで話しているの?サーバーの実装では?あなたはJAXWSまたは単純なフロントエンドを使用していますか?等...

JAXWSを使用して、あなたのサーバーのimplでそれをしたい場合は、

、JAXWS WebServiceContextのはちょうどあなたがユーザーを検証した後、WSS4Jが作成する主要だろうgetUserPrincipal()メソッドを持っています。

ほとんどどこにも(あるいはコンテキストを使用してサーバの独自の実装では)、あなたのような何かを行うことができます:

message.get(SecurityContext.class).getUserPrincipal();

同じ結果を達成するために。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top