java - 与 Jersey 的响应授权

标签 java json jersey jax-rs

我有一个 Jersey 2 应用程序,其中包含消耗和生成 json 的资源。我的要求是向由各种响应数据组合生成的授权响应 header 添加签名(类似于 Amazon Webservices 请求签名)。这些数据之一是响应正文,但我看不到有任何过滤器或拦截点允许我访问 json 内容。我想这主要是因为响应输出流是用于写入而不是读取。

关于如何阅读响应正文或替代方法有什么想法吗?

谢谢。

最佳答案

我的理解是,当您的应用程序响应请求时,您希望通过向其值添加签名来修改 Authorization header 。

如果是这种情况,您需要实现一个 ContainerResponseFilter:

public class MyContainerResponseFilter implements ContainerResponseFilter {
    @Override
    public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {
        // You can get the body of the response from the ContainerResponseContext
        Object entity = containerResponseContext.getEntity();
        // You'll need to know what kind of Object the entity is in order to do something useful though
        // You can get some data using these functions
        Class<?> entityClass = containerResponseContext.getEntityClass();
        Type entityType = containerResponseContext.getEntityType();

        // And/or by looking at the ContainerRequestContext and knowing what the response entity will be
        String method = containerRequestContext.getMethod();
        UriInfo uriInfo = containerRequestContext.getUriInfo();

        // Then you can modify your Authorization header in some way
        String authorizationHeaderValue = containerResponseContext.getHeaderString(HttpHeaders.AUTHORIZATION);
        authorizationHeaderValue = authorizationHeaderValue + " a signature you calculated";
        containerResponseContext.getHeaders().putSingle(HttpHeaders.AUTHORIZATION, authorizationHeaderValue);
    }
}

请注意,即使 Jersey 找不到请求路径的匹配资源,也会对应用程序的所有请求调用 filter 函数,因此您可能需要进行一些额外的检查.

关于java - 与 Jersey 的响应授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996562/

相关文章:

java - 如果查询中没有这样的键,如何关闭 AWS 连接

android - 解析 google place api json

python - python 模块的完全限定名称

android - Jersey 客户端需要 Android 中缺少的 XMLInputFactory

java - Hibernate 和 Jersey 依赖冲突(javassist) - 谁能解释这是如何工作的?

java - 我如何用 Jersey (java)初始化休息服务器中的对象?

java - 使用 Spring Controller 列出数据库中的对象

JavaFX + Maven + Ojdbc6 + IntelliJ(使用适用于 Windows 的 Javafx 应用程序部署 oracle jar)

java - tomcat重启后无法访问php会​​话变量

javascript - Angular - 指令生成数据,我需要获取生成的 json 结果