我正在尝试使用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过于繁琐,并且不适合使用大量用户凭据进行自动负载测试.感谢任何帮助.
这个问题已经被问了几次前,但答案似乎不工作,和/或泽西已经改变,有更多的变化.
我正在使用JAX-RS和Jersey(版本2.24)公开一些REST API.我希望使用JAX-RS和一个具体实现(没有任何注释)来注释接口.但是,由于这个补丁泽西停止支持这种可能性.据我了解规范,它并没有严格禁止这样做.
如果子类或实现方法具有任何JAX-RS注释,则忽略超类或接口方法上的所有注释.
意味着这样做是完全可以的.在许多情况下,使用接口是好的,并且服务器和客户端各自具有它们各自的实现.
那里有很多解决方案,
ResourceConfig和做一个registerClasses(MyImplementation.class).但是,这不起作用.web.xml,创建自定义javax.ws.rs.Application并register从那里执行您的实现.不行.ResourceConfig并定义一个自定义AbstractBinder并执行一个bind以便Jersey的依赖注入可以找到具体的实现.不行.如果有人可以分享他们的经验,我将不胜感激.任何有关如何让泽西岛工作的帮助也会很棒.至于选项(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
尝试通过SPNEGO和Kerberos对Windows客户端(IE/Firefox)进行身份验证.服务器端是Java/Tomcat,带有用于SPNEGO身份验证的JCIFS.在Win 2008 R2服务器上托管服务器端时,SSO(Kerberos)auth工作正常.但是,当在2012服务器上时,它失败了GSSException: Defective token detected.
通过网络跟踪深入挖掘我发现,在工作的情况下,IE客户端发送带有4个mechTypes的协商令牌:
MS KRB5,KRB5,NEGOEX,和NTLMSSP在这种情况下,我的服务器端将完成SPNEGO选择MS KRB5.但是,在问题的情况下,IE客户端只发送带有2个mechtypes的令牌 - NEGOEX和NTLMSSP.这是首选的发起人.Java不支持NEGOEX,因此失败.
一些搜索显示此问题与JDK*中的错误或DNS问题有关.但是,我在最新的JDK和DNS似乎没问题.所以我的问题是,Windows中的浏览器什么时候切换到SPNEGO中的NEGOEX?为什么?我找到的最接近的答案是在msdn博客中说的Kerberos is not available since it's not in a domain environment.但是,客户端确实在域环境中并klist显示有效的Kerberos票证.如果它确实是一个域问题,究竟可能是根本原因,我该如何避免这个问题呢?
我有一个扩展HttpServlet和实现GET请求的servlet .我还使用了一个过滤器(来自外部库),它被映射到上面的servlet url.现在,过滤器抛出异常,正如预期的那样,我得到了这个
严重:servlet [myServlet]的Servlet.service()与path []的上下文引发了异常
我知道error-page描述可能是捕获此异常的标准方法,但有没有办法从特定的servlet过滤器中捕获异常?我已经有了error-page描述并重定向到一个简单的html页面.我也不想重定向到jsp页面左右,并使用错误参数.简而言之,我的问题是:
error-page描述似乎没有任何字段选择哪抛出异常的servlet.浏览器环境中的 Javascript。我希望获取与特定模式匹配的 JSON 对象中的所有键。说,所有以mystring. 有没有更简单/有效的方法来做到这一点而不必遍历所有键?
{
somekey1: "someval1",
somekey2: "someval2",
mystringkey1: "someval",
mystringkey2: "someval"
}
Run Code Online (Sandbox Code Playgroud)
有过类似的问题,但是 a) 没有完全回答这个问题,b) JQuery 目前不是一个选项。
Apache Phoenix 推荐使用盐桶来提高性能。我希望获得我前段时间创建的表的盐桶数。
SHOW CREATE TABLE。describe命令不提供有关SALT_BUCKETS.怎样才能得到计数?