为什么在Server.xml中需要Realm设置而不是web.xml

时间:2011-11-18 23:01:42

标签: java java-ee tomcat jdbcrealm j-security-check

我正在研究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。

完全对此感到困惑。寻找一些解释。

1 个答案:

答案 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的文档中已经如此)