使servlet过滤器适用于所有Web应用程序

时间:2013-04-13 08:21:42

标签: java jsp tomcat servlets servlet-filters

我正在使用JSP& amp;开发一个Web应用程序。的servlet。

我为servlet filter目的开发了Login。其中检查用户是否登录,如果用户登录则允许访问所请求的资源,否则将请求重定向到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>

现在我在Login上部署了名为Tomcat 7的应用程序。此servlet filter适用于此Web应用程序中的资源(JSP,Servltes,.css,.js)。

现在在Tomcat中还有其他网络应用程序,例如ProfilesDistribution等。所以现在我想要的是在Filter应用程序中应用Login 适用适用于Tomcat中部署的所有其他应用程序。表示对其他应用程序资源的每个请求都应该通过我开发的Filter

所以任何建议都将受到赞赏!

EDIT1

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

2 个答案:

答案 0 :(得分:3)

<filter><filter-mapping>定义放在$CATALINA_HOME/conf/web.xml

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

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

答案 1 :(得分:1)

将您的代码添加到其他两个应用程序的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
    }
}