#java #parameters #jaas #j-security-check
#java #параметры #jaas #j-проверка безопасности
Вопрос:
В нашем приложении нам нужно разрешить пользователю выбирать нужный источник данных при входе в систему с помощью аутентификации на основе форм, и я не уверен, возможно ли это вообще при использовании стандартной аутентификации на основе форм. Я слышал, что это возможно с помощью TextInputCallback, но понятия не имею, как (и где) это реализовать.
Комментарии:
1. TextInputCallback является частью JAAS.
Ответ №1:
В web.xml
нем может быть максимум один <login-config>
тег. Это означает, что вы не можете использовать более одной области в одном веб-приложении. Итак, вам нужно более или менее специфичное для контейнера решение.
В Tomcat есть CombinedRealm, который может использовать другие области.
Реализация области, содержащая одну или несколько областей. Аутентификация выполняется для каждой области в том порядке, в котором они были настроены. Если какая-либо область аутентифицирует пользователя, аутентификация завершается успешно. При объединении областей имена пользователей должны быть уникальными во всех объединенных областях.
Возможно, это соответствует вашим требованиям. Если нет, и пользователи существуют более чем в одной области (с одним и тем же именем пользователя), вы можете использовать префиксы. Например, установить "domainmyuser"
в качестве имени пользователя.
Если вы используете вложенные JDBCRealm
s, вы можете создать представление базы данных, которое содержит имена пользователей с префиксами (просто соедините префикс с именем пользователя) и использовать это представление в качестве таблицы пользователей.
Другой подход заключается в удалении префикса в пользовательской области и вызове контейнера JDBCRealm
(или других его областей), но для этого требуется некоторое кодирование. В любом случае, это не должно быть слишком сложно, уже существующие области, вероятно, можно использовать с шаблоном проектирования делегатов.
Комментарии:
1. Если я правильно понял вашу идею, мне нужно изменить базу данных, чтобы сделать это. Но как насчет использования AbstractRoutingDataSource от Spring для переключения между ними? Это проект миграции / интеграции, поэтому мы не можем изменять настройки базы данных или добавлять в нее что-либо новое.
2. Если вы используете
CombinedRealm
и базы данных не содержат одно и то же имя пользователя, вам не нужно создавать новое представление. Если вы используетеCombinedRealm
и базы данных содержат одно и то же имя пользователя, вы можете написать пользовательскую область (без изменения баз данных). Я ничего не знаю о SpringAbstractRoutingDataSource
.