【问题标题】:make servlet filter applicable for all web applications使 servlet 过滤器适用于所有 Web 应用程序
【发布时间】:2023-03-20 16:18:01
【问题描述】:

我正在使用 JSP 和 Servlet 开发一个 Web 应用程序。

我为Login 开发了一个servlet filter。它检查用户是否已登录,如果用户已登录,则它允许访问所请求的资源,否则它将请求重定向到Login page。而且效果很好。

过滤器

public class MyFilter implements Filter
{
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException 
    {
        //code here
    }
}

web.xml

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.myfilter.MyFilter</filter-class>
    <init-param>
        <param-name>PARAM_NAME_HERE</param-name>
        <param-value>PARAM_VALUES_HERE</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

现在我已经在Tomcat 7 上部署了这个名为Login 的应用程序。这个servlet filter 非常适合此 Web 应用程序中的资源(JSP、Servltes、.css、.js)。

所以现在在 Tomcat 中还有其他 Web 应用程序,例如 ProfilesDistribution 等。所以现在我想要在 Login 应用程序中应用 Filter 以供所有人使用适用其他应用程序部署在Tomcat。意味着对其他应用程序资源的每个请求都应该通过我开发的Filter

因此,我们将不胜感激任何建议!

编辑1

我不想将包含Filter 的包放在其他应用程序中。因为在 Tomcat 服务器中部署了 10 多个应用程序,而且还会部署更多应用程序。所以假设如果我将包含Filter 的包放在所有其他应用程序中并进行 servlet 映射,但是如果几天后我想在过滤器中进行一些更改,那么我将需要在所有应用程序中进行更改,然后重新部署它们将需要。

【问题讨论】:

    标签: java jsp tomcat servlets servlet-filters


    【解决方案1】:

    将您的 &lt;filter&gt;&lt;filter-mapping&gt; 定义放在 $CATALINA_HOME/conf/web.xml

    这些定义由所有 Web 应用程序共享。

    您必须将所有与登录相关的逻辑打包到一个 jar 中,并将其放在 $CATALINA_HOME\lib 下,以便您的所有 Web 应用程序都可以访问它。

    【讨论】:

    • 在 weblogic 和 OHS 中有什么方法可以做到这一点?
    【解决方案2】:

    将此代码添加到其他两个应用程序的 web.xml 中。

    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.myfilter.MyFilter</filter-class>
        <init-param>
            <param-name>PARAM_NAME_HERE</param-name>
            <param-value>PARAM_VALUES_HERE</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    过滤器

    public class MyFilter implements Filter
    {
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException 
        {
            //code here
        }
    }
    

    【讨论】:

    • 感谢您的回答,但它不起作用,它在启动Tomcat服务器java.lang.ClassNotFoundException: com.myfilter.MyFilter时出现异常,我的包含过滤器的包在Login应用程序中。
    • @Bhushan Ya 它会给出该错误,因为您没有将此包 com.myfilter.Myfilter 添加到其他两个应用程序中。试试看吧。
    • 是的,我知道如果在这些应用程序中添加这个包,那么它将完美运行,但我的问题是我应该如何将 Filter 中的 Login 应用程序 Applicable 添加到部署在 tomcat 中的所有其他应用程序
    • @Bhushan 这样做有什么需要。
    • @Bhushan 这样做没有意义,在我看来这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2020-09-17
    • 2012-10-10
    • 2018-10-28
    • 2013-11-06
    相关资源
    最近更新 更多