Java Tomcat 6下特定于Web应用程序的表单验证器
在你的帮助下,我成功地解决了我提出的一个问题。我为web应用程序开发了一个自定义Tomcat验证器,目前验证器及其配置文件位于Java Tomcat 6下特定于Web应用程序的表单验证器,java,tomcat6,context.xml,tomcat-valve,Java,Tomcat6,Context.xml,Tomcat Valve,在你的帮助下,我成功地解决了我提出的一个问题。我为web应用程序开发了一个自定义Tomcat验证器,目前验证器及其配置文件位于%CATALINA\u HOME%\lib\目录中。不幸的是,验证器配置文件几乎与开发验证器的web应用程序的配置文件(位于%CATALINA\u HOME%\webapps\myapp)重复,显然,这两个配置文件共享相同的DB连接设置。这很不方便,因为共享唯一的配置文件是最好的 我认为有两种方法可以解决这个问题: 在Tomcat启动时找到myapp的webapps目录,
%CATALINA\u HOME%\lib\
目录中。不幸的是,验证器配置文件几乎与开发验证器的web应用程序的配置文件(位于%CATALINA\u HOME%\webapps\myapp
)重复,显然,这两个配置文件共享相同的DB连接设置。这很不方便,因为共享唯一的配置文件是最好的
我认为有两种方法可以解决这个问题:
myapp
的webapps
目录,然后读取应用程序配置文件(从当前情况出发,正确配置了myapp\WEB-INF\WEB.xml
)。当然,不幸的是,这需要重新启动Tomcat%CATALINA\u HOME\lib%
提前谢谢,我的英语很抱歉。您遇到了代码重复的情况 我建议重构代码,以便Tomcat拥有所有必要的代码来进行身份验证,然后重构您的应用程序以仅使用Tomcat身份验证代码
如果您的应用程序无法使用Tomcat身份验证,那么您至少可以在Tomcat中将公共代码(包括其配置文件)上移,然后使用公共代码。啊,这要容易得多!主要思想是通过
身份验证(…)
中的(jdbcream)context.getRealm()
对象获取连接字符串。这就足以解决我的问题。有什么原因使web应用程序不能在Tomcat中调用验证器吗?(你的英语很好。)@Thorbjørn Ravn Andersen:谢谢。当前,web应用程序已将context.xml
配置为使用该验证器。唯一的问题是web应用程序是基于webapps目录的,而验证器是基于目录的%CATALINA\u HOME%\lib
,尽管验证器的业务逻辑仅依赖于该应用程序。如果他们的配置文件只是一对,而不是一对,那就太完美了。出现此问题的原因是,部署web应用程序始终需要更新验证器设置以使其保持不变。%CATALINA_HOME%\lib
只是被auth config文件“破坏”了。唯一重复的是位于CATALINA_HOME\lib\myapp.conf
(我认为应该只有JAR文件)和CATALINA_HOME\webapps\myapp\WEB-INF\myapp.conf
中的多(两)个配置。两者都包含相同的数据库连接属性。但最近我遇到了一个模糊的bug(首先看一看),因为我忘记了在部署后更新这两个文件。因此,我想以某种方式将验证器配置放入相应的web应用程序目录中,以使配置文件唯一。对不起,我不能再解释了(您是否考虑过将配置加载到容器中的PRoperties对象中,并通过JNDI将其提供给您的应用程序?@Thorbjørn Ravn Andersen:不,实际上不。我不熟悉JNDI,目前还不知道它如何帮助我在authenticator和web ap之间共享DB连接设置。)application.JNDI基本上是保存在web容器中的数据结构的哈希映射。因此,您可以在web容器中定义对象,然后在web应用程序中查找它。仅使用JRE中可用的类来转换JNDI中的对象,以避免类装入器问题。因此,如果我理解正确,请执行以下操作:1)使用JNDIAPI在web应用程序中创建上下文对象;2) 使用连接字符串等填充该上下文;3) 在第一次登录尝试之后,只需尝试在自定义验证器端检索连接字符串。是这样吗?