Да.
Однако я бы предложил сделать это с помощью фильтров сервлета вместо самого сервлета.
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.На основе этого значения фильтр будет знать, что он должен проверить или запросить все, что вы укажете, перед загрузкой сервлета.