小编use*_*622的帖子

HttpClient为Kerberos身份验证设置凭据

我正在尝试使用kerberos/HTTP主机进行身份验证.使用Apache HttpClient作为我的客户端 - 以及此源的略微修改版本. 我的Kerberos身份验证完全正常,我希望知道如何以编程方式设置登录凭据.目前,凭据是通过控制台手动输入的,但我希望在运行时由我选择.[实际上,我希望自动化并加载测试具有大量用户的服务器.].

编辑:这是相关部分的代码片段:

..
        NegotiateSchemeFactory nsf = new NegotiateSchemeFactory();        
        httpclient.getAuthSchemes().register(AuthPolicy.SPNEGO, nsf);

        Credentials use_jaas_creds = new Credentials() {

            public String getPassword() {
                return null;
            }

            public Principal getUserPrincipal() {
                return null;
            }    
        };

        httpclient.getCredentialsProvider().setCredentials(
                new AuthScope(null, -1, null),
                use_jaas_creds);

        HttpUriRequest request = new HttpGet("http://kerberoshost/");
        HttpResponse response = httpclient.execute(request);
 .. 
Run Code Online (Sandbox Code Playgroud)

该接口Credentials有两个方法- getPassword()getUserPrincipal(),但是从一些调试我这样做,他们似乎并没有在所有被调用.

我在这里错过了什么?什么是静态设置凭据的更简洁方法?

之前已经提出过一个非常类似的问题,但是keytabs/login.conf hack过于繁琐,并且不适合使用大量用户凭据进行自动负载测试.感谢任何帮助.

java authentication kerberos httpclient userprincipal

16
推荐指数
1
解决办法
2万
查看次数

如何在使用Jersey时在界面上注释JAX-RS

这个问题已经被问了几次,但答案似乎不工作,和/或泽西已经改变,有更多的变化.

我正在使用JAX-RS和Jersey(版本2.24)公开一些REST API.我希望使用JAX-RS和一个具体实现(没有任何注释)来注释接口.但是,由于这个补丁泽西停止支持这种可能性.据我了解规范,它并没有严格禁止这样做.

如果子类或实现方法具有任何JAX-RS注释,则忽略超类或接口方法上的所有注释.

意味着这样做是完全可以的.在许多情况下,使用接口是好的,并且服务器和客户端各自具有它们各自的实现.

那里有很多解决方案,

  1. 使用ResourceConfig和做一个registerClasses(MyImplementation.class).但是,这不起作用.
  2. 禁用包扫描配置web.xml,创建自定义javax.ws.rs.Applicationregister从那里执行您的实现.不行.
  3. 使用a ResourceConfig并定义一个自定义AbstractBinder并执行一个bind以便Jersey的依赖注入可以找到具体的实现.不行.
  4. 使用RESTEasy.RESTEasy似乎没有像泽西岛那样强加接口限制.从来没有尝试过.

如果有人可以分享他们的经验,我将不胜感激.任何有关如何让泽西岛工作的帮助也会很棒.至于选项(4)是否真的有必要切换?下面的示例代码.

MyResource

 package com.foo;

import javax.ws.rs.GET;
import javax.ws.rs.Path;


@Path("/hello")
public interface MyResource {

  @GET
  public String sayHello();

}
Run Code Online (Sandbox Code Playgroud)

MyResourceImpl

package com.bar;

public class MyResourceImpl implements MyResource {

  @Override
  public String sayHello() {
    return "Hello Jersey";
  }
}
Run Code Online (Sandbox Code Playgroud)

还有一个web.xml允许扫描包扫描com.foo

java rest jax-rs jersey jersey-2.0

7
推荐指数
1
解决办法
3355
查看次数

Windows客户端何时使用Initiator首选NegoEx for SPNEGO?

尝试通过SPNEGO和Kerberos对Windows客户端(IE/Firefox)进行身份验证.服务器端是Java/Tomcat,带有用于SPNEGO身份验证的JCIFS.在Win 2008 R2服务器上托管服务器端时,SSO(Kerberos)auth工作正常.但是,当在2012服务器上时,它失败了GSSException: Defective token detected.

通过网络跟踪深入挖掘我发现,在工作的情况下,IE客户端发送带有4个mechTypes的协商令牌:

  • 1.2.840.48018.1.2.2 - MS KRB5,
  • 1.2.840.113554.1.2.2 - KRB5,
  • 1.3.6.1.4.1.311.2.2.30 - NEGOEX,和
  • 1.3.6.1.4.1.311.2.2.10 - NTLMSSP

在这种情况下,我的服务器端将完成SPNEGO选择MS KRB5.但是,在问题的情况下,IE客户端只发送带有2个mechtypes的令牌 - NEGOEXNTLMSSP.这是首选的发起人.Java不支持NEGOEX,因此失败.

一些搜索显示此问题与JDK*中的错误或DNS问题有关.但是,我在最新的JDK和DNS似乎没问题.所以我的问题是,Windows中的浏览器什么时候切换到SPNEGO中的NEGOEX?为什么?我找到的最接近的答案是在msdn博客中说的Kerberos is not available since it's not in a domain environment.但是,客户端确实在域环境中并klist显示有效的Kerberos票证.如果它确实是一个域问题,究竟可能是根本原因,我该如何避免这个问题呢?


  • 脚注,一些背景研究信息:JDK8已经在GSS机制中看到了许多修复.在jdk8u40和jdk8u45中有些东西被破坏了.然后在jdku65中进一步修复.这本来是要实现NEGOEX一个错误报告被关闭了修复

    "修复SPNEGO,允许NEGOEX出现并绕过"

    但是,我不确定NEGOEX是否真的有效.NEGOEX IETF标准在RFC过期状态下被放弃了.所以我怀疑它是否真的得到了Java,库的支持.

java kerberos active-directory spnego single-sign-on

6
推荐指数
0
解决办法
590
查看次数

Java中的Servlet /过滤器特定异常处理

我有一个扩展HttpServlet和实现GET请求的servlet .我还使用了一个过滤器(来自外部库),它被映射到上面的servlet url.现在,过滤器抛出异常,正如预期的那样,我得到了这个

严重:servlet [myServlet]的Servlet.service()与path []的上下文引发了异常

我知道error-page描述可能是捕获此异常的标准方法,但有没有办法从特定的servlet过滤器中捕获异常?我已经有了error-page描述并重定向到一个简单的html页面.我也不想重定向到jsp页面左右,并使用错误参数.简而言之,我的问题是:

  • 是否有一种更简单,更优雅的方法来捕获特定 servlet 的异常并处理它们?该error-page描述似乎没有任何字段选择哪抛出异常的servlet.
  • 是否有可能捕获在特定过滤器内发生的异常并处理它们,因为过滤器抛出的异常不是自定义异常?

java servlets exception-handling exception servlet-filters

5
推荐指数
1
解决办法
9982
查看次数

获取与模式匹配的所有 JSON 键

浏览器环境中的 Javascript。我希望获取与特定模式匹配的 JSON 对象中的所有键。说,所有以mystring. 有没有更简单/有效的方法来做到这一点而不必遍历所有键?

{
   somekey1: "someval1",
   somekey2: "someval2",
   mystringkey1: "someval",
   mystringkey2: "someval"

}
Run Code Online (Sandbox Code Playgroud)

有过类似的问题,但是 a) 没有完全回答这个问题,b) JQuery 目前不是一个选项。

javascript regex json

2
推荐指数
1
解决办法
6145
查看次数

如何在 Apache Phoenix 中获取盐桶计数?

Apache Phoenix 推荐使用盐桶来提高性能。我希望获得我前段时间创建的表的盐桶数。

  • 基于 SQLLine 的客户端不提供任何类似于 MySQL 的东西SHOW CREATE TABLE
  • 此外,Hbasedescribe命令不提供有关SALT_BUCKETS.

怎样才能得到计数?

apache hbase phoenix

1
推荐指数
1
解决办法
1150
查看次数