Jersey 客户端 API - 身份验证
我正在使用 Jersey 客户端 API 向 JAX-WS Web 服务提交 SOAP 请求。默认情况下,Jersey 在受到质询时以某种方式使用我的 Windows Nt 凭据进行身份验证。谁能解释一下 Jersey 在代码中的位置?它可以被覆盖吗?
我尝试使用 HTTPBasicAuthFilter 并添加为客户端上的过滤器。我还尝试将我的凭据添加到 WebResoruce queryParams 字段,但是都没有被选中。
I'm using the Jersey client API to submit SOAP requests to a JAX-WS webservice. By default Jersey is somehow using my Windows Nt credentials for authentication when challenged. Can anyone explain where Jersey does this in the code? And can it be overriden?
I have tried using HTTPBasicAuthFilter and adding as a filter on the Client. I have also tried adding my credentials to the WebResoruce queryParams field however neither are being picked up.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
起初,我按照泽西岛用户指南中的记录进行了这项工作
,但是我不喜欢这个,因为它依赖于设置全局身份验证器。经过一番研究,我发现 Jersey 有一个
HTTPBasicAuthFilter
,它更容易使用。看:
https://jersey .github.io/nonav/apidocs/1.10/jersey/com/sun/jersey/api/client/filter/HTTPBasicAuthFilter.html
https://jersey.github.io/nonav/apidocs/1.10/jersey/com/sun/jersey/api/client/filter/Filterable.html#addFilter(com.sun.jersey.api. client.filter.ClientFilter)
At first I got this working as documented in the Jersey User guide
However I did not like this as it relied on setting a global authenticator. After some research I discovered that Jersey has a
HTTPBasicAuthFilter
which is even easier to use.See:
https://jersey.github.io/nonav/apidocs/1.10/jersey/com/sun/jersey/api/client/filter/HTTPBasicAuthFilter.html
https://jersey.github.io/nonav/apidocs/1.10/jersey/com/sun/jersey/api/client/filter/Filterable.html#addFilter(com.sun.jersey.api.client.filter.ClientFilter)
Jersey 2.x:
参考:5.9.1 。 HTTP认证支持
Jersey 2.x:
Reference: 5.9.1. Http Authentication Support
Jersey 用户指南中有一小节介绍客户端身份验证。我建议您遵循其建议并尝试使用 Apache HTTP Client 而不是 HttpURLConnection,因为它对您想做的任何事情都有更好的支持。
There's a small section in the Jersey User guide about Client authentication. I'd recommend you follow its advice and try using Apache HTTP Client instead of HttpURLConnection, as it has much better support for just about anything you'd want to do.
添加这个答案是因为我不断寻找旧版本 Jersey 的答案,这些版本在 2.x 中不再相关。
对于 Jersey 2 有多种方法。
看一下:
JavaDoc for org.glassfish.jersey.client.authentication.HttpAuthenticationFeature
这是为我工作的(最简单的基本身份验证恕我直言)。
Adding this answer as I keep finding answers for older versions of Jersey that are no longer relevant in 2.x.
For Jersey 2 there are several ways.
Take a look at:
JavaDoc for org.glassfish.jersey.client.authentication.HttpAuthenticationFeature
Here is the one that is working for me (simplest basic auth IMHO).
如果您正在测试 Dropwizard 应用程序(也许它适合任何 REST 服务),您可以使用以下示例:
https://github.com/dropwizard/dropwizard/blob/v0.8.1/dropwizard-auth/src/test/java/io/dropwizard/auth/basic/BasicAuthProviderTest.java
If you are testing a Dropwizard application (maybe it suits any REST service), you can use this as an example:
https://github.com/dropwizard/dropwizard/blob/v0.8.1/dropwizard-auth/src/test/java/io/dropwizard/auth/basic/BasicAuthProviderTest.java
请找到以下没有 SSL 的工作代码
,我正在使用 put request ,如果需要 post/get 只需更改它。
pom.xml
Java 类
POJO
Please find following working code without SSL
I am using put request , if need post/get just change it.
pom.xml
Java Class
POJO
是的,对于 jersey 2.x,您可以执行此操作以使用基本身份验证(抢占模式)对每个请求进行身份验证:
Yes for jersey 2.x you can do this to authenticate each request with basic auth (preemptive mode):