我正在研究Java应用程序一段时间。我主要在.NET平台上工作。虽然我觉得很多概念在这两个平台之间很常见,但是我发现一些与配置相关的问题很少。
我正在进行身份验证和授权,并且我认为我会在JAVA中获得类似于.NET的成员身份API的东西。我得到的最近的是使用j_security_check。我也了解了JAAS,但认为这对我来说有点太深入了。
我在数据库中创建了用户和角色表,现在我必须在某处指定JDBC Realm设置。我正在使用Tomcat 7.0。在大多数地方,我提到我需要在server.xml中指定领域设置。但这不适用于部署在该服务器上的所有Web应用程序,因为它将成为服务器级别的配置吗?
在一个网站上,我甚至看到一位开发人员提到了context.xml,但是再次看不到提到使用这个XML文件来设置JDBC领域的标准文档
在.NET中,我们总是将成员资格设置放在web.config级别而不是Machine.config。
完全对此感到困惑。寻找一些解释。
答案 0 :(得分:3)
为什么在Server.xml中需要Realm设置而不是web.xml
事实并非如此,您也可以在webapp中定义它,但只能在特定于servletcontainer的配置文件中定义,例如Tomcat中的/META-INF/context.xml
。它不能在/WEB-INF/web.xml
中定义,因为它特定于标准的Servlet API,而不是servletcontainer实现。
但这不适用于部署在该服务器上的所有Web应用程序,因为它将成为服务器级配置吗?
这是对的。如果您无法控制服务器或者您不想通过其他Web应用程序发布域,则不建议这样做。
在一个网站上,我甚至看到一位开发人员提到了context.xml,但又看不到提到使用这个XML文件来设置JDBC领域的标准文档
您可以在webapp的/META-INF/context.xml
中指定它。另请参阅Tomcat's own documentation on the <Context>
element:
定义上下文
建议不要将
<Context>
元素直接放在server.xml
文件中。这是因为它会使上下文配置更具侵入性因为在不重新启动Tomcat的情况下无法重新加载主conf/server.xml
文件。可以明确定义单个上下文元素:
在应用程序文件中
/META-INF/context.xml
的单个文件中。 (可选)(基于主机的copyXML属性)可以将其复制到$CATALINA_BASE/conf/[enginename]/[hostname]/
并重命名为应用程序的基本文件名加上“.xml”扩展名。在
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录中的单个文件(扩展名为“.xml”)中。上下文路径和版本将从文件的基本名称(文件名减去.xml扩展名)派生。此文件将始终优先于Web应用程序的META-INF目录中打包的任何context.xml文件。在主
conf/server.xml
中的Host元素内。
(重点不是我的,在Tomcat的文档中已经如此)