我们有一个使用 Acegi 安全性的 JSF Web 应用程序。我们还有一个独立的 Java Swing 应用程序。Swing 应用程序的一项功能是在浏览器窗口中加载用户的主页。
为此,我们目前正在使用 Commons HttpClient 对 Web 应用程序的用户进行身份验证:
String url = "http://someUrl/j_acegi_security_check";
HttpClient client = new HttpClient();
System.setProperty(trustStoreType, "Windows-ROOT");
PostMethod method = new PostMethod(url);
method.addParameter("j_username", "USERNAME");
method.addParameter("j_password", "PASSWORD");
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_MOVED_TEMPORARILY ) {
Header locationHeader= method.getResponseHeader("Location");
String redirectUrl = locationHeader.getValue();
BrowserLauncher launcher = new BrowserLauncher();
launcher.openURLinBrowser(redirectUrl);
}
这将返回一个 HTTP 302 重定向响应,我们从中获取重定向 url 并使用 BrowserLauncher 2 打开它。该 url 包含新的会话 ID,类似于:
http://someUrl/HomePage.jsf;jsessionid=C4FB2F643CE48AC2DE4A8A4C354033D4
我们看到的问题是 Acegi 处理重定向但抛出 AuthenticationCredentialsNotFoundException。似乎由于某种原因无法在安全上下文中找到经过身份验证的凭据。
有谁知道为什么会这样?如果有人需要更多信息,那么我很乐意提供帮助。
非常感谢,
理查德