5

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

我已经开发了一个servlet filterLogin目的的。它检查用户是否已登录,如果用户已登录,则它允许访问所请求的资源,否则它将请求重定向到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>

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

所以现在Tomcat还有其他的 web 应用程序ProfilesDistribution等等。所以现在我想要的是应用FilterinLogin应用程序适用于部署在Tomcat. 意味着对其他应用程序资源的每个请求都应该通过Filter我开发的。

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

编辑1

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

4

2 回答 2

3

把你的<filter><filter-mapping>定义放在里面$CATALINA_HOME/conf/web.xml

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

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

于 2013-04-13T08:55:16.997 回答
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
    }
}
于 2013-04-13T08:25:19.910 回答