在泽西为自己的服务编写代理/包装类

时间:2011-03-27 11:39:34

标签: java rest jersey

我希望使用基本的http auth运行来访问完整的休息服务。 但是,当wrong credential is provided时,javascript浏览器客户端无法禁止身份验证框。

我想到了解决这个问题的不同方法

  • 有人建议使用过滤器删除WWW-Authenticate Header(我不认为这是一种干净的方法)
  • 我可以改写我的应用程序,根本不使用Basic Http Auth(我认为这太麻烦了)
  • 我可以写一个与我的常规服务对话的代理

我最喜欢最后一种方法。 我保留了常规的Rest Interface,但也可以选择将此接口用于不那么灵活的客户端。 此外,我稍后可以代理某些浏览器不支持的Http请求。

我们的想法是拥有代表/ api / {request}的/ api / proxy / {request}路径并返回类似Facebook-Graph的JSON查询{data:{data},error:{error}}

这是Proxy类的存根

@Path("proxy")
public class ProxyResource {
@GET()
@Path("{url: [a-zA-Z/]*}")
public String get(@Context Request request, @PathParam("url") String url) {
        // remove proxy/ from path
        // resend request
        // verify result
}

} 我可以访问Request(它似乎是一个ContainerRequest)。如何修改请求而不从头开始构建它以重新发送它。

编辑:当有人知道更好的方法时,我很高兴听到它。

1 个答案:

答案 0 :(得分:1)

当我开始深入研究这个时,我发现不是401就是问题。从服务器发回的www-authenticate标头导致浏览器打开登录框。

如果有人感兴趣我已经编写了一个小的nodejs代理来从所有服务器请求中删除www-authenticate。

https://gist.github.com/ebb9a5052575b0a3f41f

由于这不是我原来问题的答案,我将把它打开。