У нас есть веб-приложение JSF, которое использует безопасность Acegi. У нас также есть отдельное приложение Java Swing. Одной из функций приложения Swing является загрузка домашней страницы пользователя в окне браузера.
Для этого в настоящее время мы используем Commons HttpClient для аутентификации пользователя с помощью веб-приложения:
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-адрес содержит новый идентификатор сеанса, например:
http://someUrl/HomePage.jsf;jsessionid=C4FB2F643CE48AC2DE4A8A4C354033D4
Проблема, с которой мы сталкиваемся, заключается в том, что Acegi обрабатывает перенаправление, но генерирует исключение AuthenticationCredentialsNotFoundException. Кажется, по какой-то причине аутентифицированные учетные данные не могут быть найдены в контексте безопасности.
У кого-нибудь есть идея относительно того, почему это происходит? Если кому-то понадобится дополнительная информация, я буду рад вам помочь.
Большое спасибо,
Richard