原因:
默认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
时间: 2024-08-04 19:13:18