Ограничение безопасности Tomcat для действительного пользователя
Я пытаюсь защитить ресурс в Tomcat, чтобы только "действительные пользователи" (те, кто имеет действительный логин и пароль в области) могли получить к нему доступ. Они не обязательно принадлежат группе в царстве. Я пробовал со многими комбинациями <security-constraint>
директива без успеха. Есть идеи?
3 ответа
Помимо ограничения авторизации, которое вы добавляете в ограничение безопасности:
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
Вам необходимо указать роль безопасности в веб-приложении:
<security-role>
<role-name>*</role-name>
</security-role>
В tomcat есть несколько реализаций царства - память, база данных, JAAS и многое другое. Самый простой способ настроить (хотя и не самый безопасный) модуль памяти, который содержит один файл XML, обычно в файле conf/tomcat-users.xml:
<tomcat-users>
<user name="tomcat" password="tomcat" roles="tomcat" />
<user name="role1" password="tomcat" roles="role1" />
<user name="both" password="tomcat" roles="tomcat,role1" />
</tomcat-users>
Конфигурация области находится под контекстом, конфигурациями хоста или механизма, как это:
<Realm className="org.apache.catalina.realm.MemoryRealm"
pathname="conf/tomcat-users.xml" />
Затем в файле web.xml вы помещаете следующее определение:
<security-constraint>
<web-resource-collection>
<web-resource-name>MRC Customer Care</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>YOUR REALM NAME</realm-name>
</login-config>
<security-role>
<description>
The role that is required to access the application.
Should be on from the realm (the tomcat-users.xml file).
</description>
<role-name>role1</role-name>
</security-role>
Часть web.xml взята (с небольшими изменениями) из одного из наших веб-приложений.
Если мы используем Tomcat 8.x, поскольку предоставленный server.xml будет входить во вложенный элемент Realm, пожалуйста, добавьте 'allRolesMode = "authOnly"' в элемент "outmost" Realm и измените вышеупомянутый web.xml для тестирования. например
<Realm allRolesMode="authOnly" className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
</Realm>
Пожалуйста, прочитайте org.apache.catalina.realm.RealmBase.java для деталей.
Также полезны следующие настройки в logging.properties.
org.apache.catalina.realm.level=ALL
org.apache.catalina.realm.useParentHandlers=true
org.apache.catalina.authenticator.level=ALL
org.apache.catalina.authenticator.useParentHandlers=true