Несколько методов аутентификации Java-сервлетов - PullRequest
5 голосов
/ 18 июня 2010

Можно ли иметь несколько методов аутентификации для сервлета Java?Например, используйте аутентификацию на основе форм в дополнение к аутентификации на основе открытого идентификатора , чтобы пользователи могли выбирать способ входа.

Ответы [ 3 ]

7 голосов
/ 18 июня 2010

Да.

Однако я бы предложил сделать это с помощью фильтров сервлета вместо самого сервлета.

http://brendangraetz.wordpress.com/2010/06/17/use-servlet-filters-for-user-authentication/

Выполните действия, описанные в этом посте,и переопределите метод isAuth(), чтобы он выполнял аутентификацию в любом количестве режимов.В (очень грубом, непроверенном) коде:

@Override protected boolean isAuth()
{
    String authMode = (String)(getSession(true).getAttribute("authMode"));
    if (authMode == null) { return false; }
    if (authMode.equals("open id") {
        //do open id authentication steps here
        //return true if authentication passes
    }
    else if (authMode.equals("some other authentication") {
        //do some other authentication steps here
        //return true if authentication passes
    }
    ...
    return false;    
}

Я, конечно, предполагаю, что вы уже знаете, как реализовать шаги аутентификации в каждом режиме по отдельности.

«Хитрость» заключается в том, чтобысохранить значение в сеансе HTTP, сразу после того, как пользователь выполнит авторизацию в сеансе HTTP.На основе этого значения фильтр будет знать, что он должен проверить или запросить все, что вы укажете, перед загрузкой сервлета.

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

Другой способ выполнить множественную аутентификацию - это JAAS, сервис аутентификации и авторизации Java. Используя JAAS, вы можете размещать различные модули аутентификации друг над другом и настраивать, какой модуль аутентификации запускать, а какой - нет. Это называется PAM (подключаемый модуль аутентификации). Ищите «J2SE JAAS» в Google или посмотрите на http://server.pramati.com/docstore/1270002/index.htm.. Это поможет вам начать работу, если вы решите пойти по этому пути.

0 голосов
/ 18 июня 2010

Да, это возможно, но реализовать его немного сложно.

Например, в SpringSecurity из коробки имеется поддержка локальной аутентификации, OpenId, X509 и других схем, нообъединение их так, что у пользователя есть альтернативные способы входа в систему, требующие пользовательских классов и пользовательской проводки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...