Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat 6下特定于Web应用程序的表单验证器_Java_Tomcat6_Context.xml_Tomcat Valve - Fatal编程技术网

Java Tomcat 6下特定于Web应用程序的表单验证器

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目录,

在你的帮助下,我成功地解决了我提出的一个问题。我为web应用程序开发了一个自定义Tomcat验证器,目前验证器及其配置文件位于
%CATALINA\u HOME%\lib\
目录中。不幸的是,验证器配置文件几乎与开发验证器的web应用程序的配置文件(位于
%CATALINA\u HOME%\webapps\myapp
)重复,显然,这两个配置文件共享相同的DB连接设置。这很不方便,因为共享唯一的配置文件是最好的

我认为有两种方法可以解决这个问题:

  • 在Tomcat启动时找到
    myapp
    webapps
    目录,然后读取应用程序配置文件(从当前情况出发,正确配置了
    myapp\WEB-INF\WEB.xml
    )。当然,不幸的是,这需要重新启动Tomcat
  • 可能有一种方法可以将表单验证器放入相应的web应用程序目录中,以便能够直接读取共享配置文件。也许这可以消除Tomcat重启并允许简单的重新部署
  • 如果可能的话,我更喜欢第二种解决方案,但我不确定。如果两者都存在,哪种方法更好?或者有没有其他更好的解决方案不将特定于web应用程序的验证器放入
    %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) 在第一次登录尝试之后,只需尝试在自定义验证器端检索连接字符串。是这样吗?