我使用 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 并发布一个字符串。
这个解决方案听起来让我很失望。有任何想法吗?
最好的问候,米