我在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。我错过了什么吗?
答案 0 :(得分:3)
是的,我确认Weblogic拦截了你的电话。
您必须在weblogic config.xml文件中将<enforce-valid-basic-auth-credentials>
标记强制为false。
请查看Error adding enforce-valid-basic-auth-credentials to config.xml和http://www.dba-oracle.com/t_weblogic_bypass_basic_authentication.htm