2010-09-18 29 views
0

在您的帮助下,我已成功解决了一个问题,我询问了here。我为Web应用程序开发了一个定制的Tomcat身份验证器,并且当前身份验证器及其配置文件位于%CATALINA_HOME%\lib\目录中。不幸的是,身份验证器配置文件几乎与Web应用程序的配置文件(位于%CATALINA_HOME%\webapps\myapp)中的验证器的开发副本相同,并且配置文件显然都共享相同的DB连接设置。这很不方便,因为共享唯一的配置文件将是最好的。Tomcat下的Web应用程序特定表单验证器6

我觉得有可能是解决该问题有两种方法:

  1. 找到webapps目录myapp存在某种方式在Tomcat启动,然后读取应用程序配置文件(从目前的情况出发,而myapp\WEB-INF\web.xml配置正确)。当然,不幸的是这需要Tomcat重启。
  2. 可能有一种方法可以将表单验证器放入相应的Web应用程序目录,以便能够直接读取共享配置文件。也许这可能会消除Tomcat重启并允许简单的重新部署。

我想更喜欢第二种解决方案,但如果可能的话,但我不确定。哪种方式更好,如果它们都存在?还是有没有其他的甚至更好的解决方案,而不是web应用程序特定的验证器到%CATALINA_HOME\lib%

在此先感谢并对我的英语感到抱歉。

+0

是否有任何理由为什么Web应用程序不能只调用Tomcat中的身份验证器? (和你的英语很好。) – 2010-09-18 23:21:11

+0

@ThorbjørnRavn Andersen:谢谢。目前该web应用程序已经配置了'context.xml'来使用该认证器。唯一的问题是,Web应用程序是基于webapps-directory的,而验证器是'%CATALINA_HOME%\ lib'-directory-base,尽管验证器的业务逻辑取决于该应用程序。如果他们的配置文件只是一对而已,它可能是完美的。问题的原因是,部署Web应用程序始终需要更新认证程序设置才能变得相同。 '%CATALINA_HOME%\ lib'只是用认证配置文件“宠坏了”。 – 2010-09-19 07:20:42

回答

0

啊,这一切都容易!主要想法是通过authenticate(...)中的(JDBCRealm) context.getRealm()对象获取连接字符串。这足以解决我的问题。

0

您有一个代码重复的情况。

我会建议重构代码,以便Tomcat拥有所有必要的代码以验证其身份,然后重构您的应用程序以仅使用Tomcat验证代码。

如果您的应用程序无法使用Tomcat认证,那么您至少可以将公共代码(包括其配置文件)移动到Tomcat中,然后使用公共代码。

+0

唯一重复的是位于'CATALINA_HOME \ lib \ myapp.conf'(我相信应该只有JAR文件)和'CATALINA_HOME \ webapps \ myapp \ WEB-INF \ myapp.conf'中的多个(两个)配置。两者都包含相同的DB连接属性。但最近我有一个模糊的(第一次看)bug,因为我忘记部署后更新这两个文件。因此,我想将验证器配置以某种方式放入相应的Web应用程序目录中,以使配置文件具有唯一性。对不起,我无法做得更好。:( – 2010-09-19 08:56:15

+0

您是否考虑过将配置加载到容器中的PRoperties对象中,并通过JNDI将其提供给您的应用程序? – 2010-09-19 09:09:10

+0

@ThorbjørnRavn Andersen:不,实际上我不熟悉JNDI,并且暂时无法弄清楚它是如何帮助我在验证器和Web应用程序之间共享数据库连接设置的。 – 2010-09-19 09:24:09

相关问题