struts2和CKFinder的整合(java版)

来源:互联网 发布:苹果手机网络卡怎么办 编辑:程序博客网 时间:2024/06/01 17:17

原因:

默认web.xml配置
 <filter>        <filter-name>struts2</filter-name>        <filter-class>            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter        </filter-class>    </filter>    <filter-mapping>        <filter-name>struts2</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>
站点所有请求都要经过struts2过滤器,即CKFinder相关请求也会被struts2拦截,导致请求没有经过CKFinder配置的servlet。
 <servlet>         <servlet-name>ConnectorServlet</servlet-name>         <servlet-class>com.ckfinder.connector.ConnectorServlet</servlet-class>        <init-param>             <param-name>XMLConfig</param-name>             <param-value>/WEB-INF/ckfinder.xml</param-value>         </init-param>         <init-param>             <param-name>debug</param-name>             <param-value>false</param-value>         </init-param>         <load-on-startup>1</load-on-startup>     </servlet>     <servlet-mapping>        <servlet-name>ConnectorServlet</servlet-name>         <url-pattern>/ckfinder2.4/core/connector/java/connector.java </url-pattern>     </servlet-mapping>

解决办法:

自己实现struts2过滤器,判断是否CKFinderde 请求,如果是则放行,否则默认struts2的方式继续往下走。部分代码如下:
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;public class MyStrutsInterceptor extends StrutsPrepareAndExecuteFilter {    public void doFilter(ServletRequest req, ServletResponse res,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        String URI = request.getRequestURI();            String[] ckfarr = URI.split("/ckfinder2.4/core/connector/java/*/");        int arrayLen = ckfarr.length;        if (arrayLen >= 2) {            chain.doFilter(req, res);        } else {            super.doFilter(req, res, chain);        }    }}

原文链接:http://www.iyuze.cn/article/485.html
0 0