Я создал пользовательский поставщик аутентификации Weblogic Security в версии 10.3, который включает в себя пользовательский модуль входа для проверки пользователей.Как часть провайдера, я реализовал ServletAuthenticationFilter и добавил один фильтр.Фильтр действует как общая страница входа для всех приложений в домене.
Когда мы получаем доступ к любым защищенным URL-адресам, вводя их в адресную строку, это прекрасно работает в IE и Firefox.Но когда мы закладываем ссылку в IE, происходит нечто странное.Если я нажму на закладку, вы увидите страницу входа в систему, а после успешного входа в систему отобразится базовая страница авторизации, даже если пользователь уже аутентифицирован.Это никогда не происходит в Firefox, только в IE.Это также с перебоями.1 раз из 5 IE будет правильно перенаправлять и не будет отображать основное окно аутентификации.Firefox и Opera будут правильно перенаправлять каждый раз.Мы зафиксировали заголовки ответа и сравнили успехи и неудачи, они идентичны.
final boolean isAuthenticated = authenticateUser(userName, password, req);
// Send user on to the original URL
if (isAuthenticated) {
res.sendRedirect(targetURL);
return;
}
Как видите, после аутентификации пользователя я делаю перенаправление на исходный URL.Есть ли шаг, который я пропускаю?Метод authenticateUser () дословно взят из примера в документах Oracle.
private boolean authenticateUser(final String userName, final String password, HttpServletRequest request) {
boolean results;
try {
ServletAuthentication.login(new CallbackHandler() {
@Override
public void handle(Callback[] callbacks)
throws IOException, UnsupportedCallbackException {
for (Callback callback : callbacks) {
if (callback instanceof NameCallback) {
NameCallback nameCallback = (NameCallback) callback;
nameCallback.setName(userName);
}
if (callback instanceof PasswordCallback) {
PasswordCallback passwordCallback = (PasswordCallback) callback;
passwordCallback.setPassword(password.toCharArray());
}
}
}
}, request);
results = true;
} catch (LoginException e) {
results = false;
}
return results;
Я задаю вопрос здесь, потому что я не знаю, связана ли проблема с конфигурацией Weblogic или кодом.Если этот вопрос больше подходит для ServerFault, пожалуйста, дайте мне знать, и я опубликую там.
Странно, что он работает каждый раз в Firefox и Opera, но не в Internet Explorer.Я бы хотел, чтобы не использовать Internet Explorer, но в настоящее время это стандарт компании.Любая помощь или направление будут оценены.Я протестировал IE 6 и 8 и развернул пользовательский провайдер в 3 различных средах, и я все еще могу воспроизвести ошибку.