Struts2中的过滤器

时间:2018-10-09 05:19:24

标签: struts2

我正在将应用程序从Struts1迁移到Struts2。

在我的Struts1应用程序中,我有一个由两个过滤器(Filter1.java,Filter2.java)实现的过滤器链。 而且我也重写了ActionServlet类。 下面是如何在web.xml中配置这些组件。

<filter>
    <filter-name>Filter1</filter-name>
    <filter-class>MyFilter1</filter-class>
</filter>

<filter>
    <filter-name>Filter2</filter-name>
    <filter-class>MyFilter2</filter-class>

    ...init params...

</filter>

<filter-mapping>
    <filter-name>Filter2</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>Filter2</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>Filter1</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>InitServlet</servlet-name>
    <servlet-class>MyActionServlet</servlet-class>
    ..........
    ..........
</servlet>

<servlet-mapping>
    <servlet-name>MyActionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

基本上,每当有一个请求到达我的应用程序时,它就会被这两个过滤器(在doFilter()方法中)拦截,然后将此请求提供给Action servlet。

Filter1.java:

public void doFilter(....) {
    ......
    if (condition) {
        filterChain.doFilter(req, res);
    }
    else {
        RequestDispatcher dispatcher = req.getRequestDispatcher("someJSPPage");
        dispatcher.forward(req, res);
    }
    ......
}

Filter2.java:

public void doFilter(....) {
    ......
    if (condition) {
        //some logic
        filterChain.doFilter(req, res);
    }
    else {
        filterChain.doFilter(req, res);
    }
    ......
}

如何在Struts2中实现这些过滤器。在Struts2中,前端控制器本身是一个过滤器(org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter)。 我已经在新的Struts2过滤器StrutsPrepareAndExecuteFilter中编写了这两个过滤器的逻辑,但没有遇到任何问题。

任何帮助将不胜感激。

谢谢, 苏尼尔

0 个答案:

没有答案