我想配置tomcat / my web应用程序以将JDBC领域用于容器管理的安全性。我在tomcat的server.xml文件中指定了这个域,如下所示:
<Realm className="org.apache.catalina.realm.JDBCRealm" driverName="net.sourceforge.jtds.jdbc.Driver" connectionURL="jdbc:jtds:sqlserver://hostname:1433/intranet;user=sa;password=sa04jT14;instance=instanceName" userTable="users" userNameCol="username" userCredCol="password" userRoleTable="roles" roleNameCol="role" />
我创建了数据库和表。我创建了一个登录页面,并将以下代码添加到web.xml:
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
</form-login-config>
</login-config>
但Tomcat如何知道他必须使用哪个领域进行身份验证? 我是否必须在元素中添加元素?但那么价值应该是什么呢?
提前致谢。
答案 0 :(得分:5)
很好。它取决于<Realm>
声明的位置,一个Tomcat会找到并用于您的webapp。它也在Tomcat's Realm Configuration HOWTO中明确提到:
<Realm>
元素可以嵌套 在以下任何一个内部Container
元素。的位置 Realm元素有直接影响 关于该领域的“范围”(即 哪些Web应用程序将共享 相同的身份验证信息):
在
<Engine>
元素内 - 此域将在所有域内共享 所有虚拟主机上的Web应用程序, 除非它被一个领域所覆盖 元素嵌套在下属中<Host>
或<Context>
元素。在
<Host>
元素中 - 此域将在所有网站上共享 这个虚拟主机的应用程序, 除非它被一个领域所覆盖 元素嵌套在下属中<Context>
元素。在
<Context>
元素内 - 此域将仅用于此 网络应用程序。
<Engine>
和<Host>
元素通常在/conf/server.xml
中声明。 <Context>
元素可以根据this documentation介绍性文本底部的列表在任何位置声明。例如,如果您打算在特定于webapp的<Context>
中定义此领域,而您希望将其与Web应用程序一起部署而不必烦恼服务器配置,那么最佳位置将是Webapp/META-INF/context.xml
。
希望这有帮助。