Internet Explorer глючит при доступе к пользовательскому провайдеру веблогики - PullRequest
0 голосов
/ 14 июня 2010

Я создал пользовательский поставщик аутентификации 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 различных средах, и я все еще могу воспроизвести ошибку.

1 Ответ

1 голос
/ 15 июня 2010

Мы разобрались.

Исправлено было отключить аутентификационные куки на сервере weblogic. По какой-то причине Internet Explorer теряет cookie, в результате чего Weblogic считает, что сеанс был взломан. Именно это и подтолкнуло базовую авторизацию входа в систему.

Мы до сих пор не знаем, из-за чего IE терял cookie, но этот провайдер предназначен для внутренней сети, поэтому исправление не повредит нашей общей безопасности.

Надеюсь, это поможет кому-то еще.

...