Исключить менеджера из Tomcat Single Sign On
Использование JAAS для единого входа на сервере Tomcat без Apache. SSO контролирует доступ к нескольким связанным приложениям и отлично работает. Недавно я начал переход на Maven из Ant, и для использования плагина Tomcat для Maven мне нужно было настроить приложение Tomcat Manager, которое раньше мне не требовалось. Мне удалось его запустить и запустить как с помощью BASIC-аутентификации, так и CLIENT-CERT-аутентификации, наряду с другими веб-приложениями на сервере.
Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь проходит проверку подлинности в диспетчере, сеанс прерывается для других веб-приложений - вход IE в веб-приложение, вход в менеджер, обновление веб-приложения, перенаправление на страницу входа.
Мне удалось смягчить это перекрытие, определив клапан SSO на уровне контекста и область на уровне хоста. Это все еще позволяет SSO работать при навигации между веб-приложениями через браузер. Тем не менее, кросс-контекстные запросы AJAX и тому подобное возвращают ошибку "Пользователь не вошел", пока я не получу доступ к другому веб-приложению, о котором идет речь. При использовании этого подхода аутентификация для Manager была эффективно изолирована от других веб-приложений.
Короче говоря, я ищу лучший способ сделать единый вход через SSL/ аутентификацию базы данных доступным для моих веб-приложений с использованием модуля аутентификации JAAS, но заставлять Tomcat исключить Manager из единого входа. IE SSO через SSL для Webapps 1,2,3, но аутентификация UN/PW не зависит от SSO для Manager, а аутентификация независима между ними.
Есть ли способ сделать это?
Текущая конфигурация:
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
<Realm className="org.apache.catalina.realm.JAASRealm" appName="CustomLogin"
userClassNames="com.foo.bar.User" roleClassNames="com.foo.bar.Role"
useContextClassLoader="true" debug="false"/>
<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
<Context path="/Webapp1" docBase="webapp1">
<ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
</Context>
<Context path="/Webapp2" docBase="webapp2">
<ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
</Context>
<Context path="/Webapp3" docBase="Webapp3">
<ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
</Context>
<Context path="/manager" docBase="manager" AntiJARLocking="false" antiResourceLocking="false" privileged="true" reloadable="false">
<Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="manager_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
</Context>
</Host>
</Engine>
При использовании этой конфигурации все веб-приложения и Диспетчер попадают под контроль единого входа, и вышеописанное перекрытие происходит - IE входит в webapp1 через SSL, затем через Диспетчер через UN/PW, затем обновляет webapp1, перенаправленный на страницу входа.
Перемещение клапана SSO в контексты веб-приложений решает эту проблему, но вызывает ответ "Пользователь не вошел в систему" для кросс-контекстных запросов AJAX.