0

jersey を使用して REST サービスを実装しました。通信層はsslで保護されています。クライアント側では、サービスを呼び出してサーバー側で要求を検証する前に、xml に署名する必要があるという要件がありました。 http://docs.oracle.com/javase/6/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html

現時点での私のサービス:

@POST
@Path(CONFIRM_PATH)
@Produces({ MediaType.APPLICATION_XML })
public ConfirmResponse confirm(ConfirmRequest request){
   // verify the signed confirm request
}

クライアント側のコード (読みやすくするためにサービス インスタンスをキャッシュするために割愛されています。

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
client.setConnectTimeout(CLIENT_CONNECT_TIMEOUT);
client.setReadTimeout(CLIENT_READ_TIMEOUT);

URI uri = UriBuilder.fromUri(url).build();
WebResource service = client.resource(uri);
// sign should happen here
ConfirmResponse  response = service.post(ConfirmRequest.class, confirmRequest);

これを処理する最善の方法は何ですか? タイプを String に変更して完全な xml を取得し、それを確認してから jaxb を使用してオブジェクトを取得するだけです。クライアント側では、xml を手動で作成して文字列を投稿することもできます。

この解決策は、私には非常に残念に思えます。何か案は?

よろしく、M

4

1 に答える 1

1

送信リクエストにフィルターを使用し、そこで署名します。コードを複製する必要がなく、集中管理できるという点で、はるかに使いやすいです。

于 2013-03-14T10:22:45.750 に答える