401在WebLogic上通过HttpClient进行身份验证时返回

时间:2016-01-21 16:52:58

标签: spring-security weblogic httpclient

我在WebLogic Application Server 12中部署了基于REST的服务,该服务使用Spring Security进行身份验证,使用BASIC Auth进行身份验证。之前我发现WebLogic有一个错误,如果请求中包含Authorization标头,它会拦截一个调用。

我找到了一个非常有用的链接,通过在WebLogic的config.xml中禁用<enforce-valid-basic-auth-credentials>false</enforce-valid-basic-auth-credentials>来解决此问题。现在,如果我通过POSTMan访问我的服务,它可以很好地工作,Spring可以处理安全问题。

在此之后,我编写了一些使用Apache Common HttpClient库来调用我的服务的自动化测试,但我不断从WebLogic获得401 Unauthorized。我的客户端代码如下;

httpClient = new HttpClient();
        httpClient.getState().setCredentials(
            new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
            new UsernamePasswordCredentials(
                    getTestUsername(config.getUsername()), 
                    getTestPassword(config.getPassword()))
            );

我尝试将auth pref添加到Basic,将Authorization标头添加到我的请求中,甚至将auth设置为Preemptoive为true,它仍然是相同的。

我确信有一件事是Weblogic以某种方式拦截了来自Java Standalone客户端的呼叫!因为在响应标题我得到的领域:weblogic&#39;这是不正确的,因为它应该是“领域:Spring Security Application&#39;”,更奇怪的是我能够使用相同的安全凭证从POSTMan访问相同的URL。我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

是的,我确认Weblogic拦截了你的电话。

您必须在weblogic config.xml文件中将<enforce-valid-basic-auth-credentials>标记强制为false。

请查看Error adding enforce-valid-basic-auth-credentials to config.xmlhttp://www.dba-oracle.com/t_weblogic_bypass_basic_authentication.htm