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 并发布一个字符串。

这个解决方案听起来让我很失望。有任何想法吗?

最好的问候,米

4

1 回答 1

1

在传出请求上使用过滤器并在那里签名。更友好的是您不需要复制代码并且您拥有中央控制权。

于 2013-03-14T10:22:45.750 回答