`
idream
  • 浏览: 44497 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

struts2.1与FCKEditor 上传问题完美解决(原创)

阅读更多

最近,遇到了这个问题,使用FckEditro上传图片时,出现了 下标越界异常。根据分析,得出结论,原来是struts2的拦截器把Fck的上传Servlet拦截了,经过了struts2对HttpServletRequest的包装,FCK已经无法正确的拿到正版的HttpServletRequest。

搜索了一下,发现不少人遇到这个问题,而解决方案是修改web.xml中

<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

 

 


 
,把其修改为: 
   

<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*.action</url-pattern> </filter-mapping>

 

 


 
这样的话,隐患很大,问题很大,而且在2.1中会报错。具体不多说,上正题。

 

解决思路:就是让这个拦截器不拦截Fck的Servlet。

步骤:
1.下载struts2.1的源代码,拿出StrutsPrepareAndExecuteFilter.java ,自己在项目新建一个包,把这个类放进去。
2.修改web.xml中原来的过滤器类路径,改为自己的这个。如下:

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>com.hs.fck.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

 

3.修改StrutsPrepareAndExecuteFilter.java,只需修改doFilter方法即可。如下:底色为绿色是修改的代码。也就是判断一下这个请求的servlet路径,如果是FCK的,就不执行包装。

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

  HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        
        if(request.getServletPath().equals("/fckeditor/editor/filemanager/connectors"))
        {
            chain.doFilter(request, response);
        }else{
            
            try {
                prepare.setEncodingAndLocale(request, response);
                prepare.createActionContext(request, response);
                prepare.assignDispatcherToThread();
                if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
                    chain.doFilter(request, response);
                } else {
                    request = prepare.wrapRequest(request);
                    ActionMapping mapping = prepare.findActionMapping(request, response, true);
                    if (mapping == null) {
                        boolean handled = execute.executeStaticResourceRequest(request, response);
                        if (!handled) {
                            chain.doFilter(request, response);
                        }
                    } else {
                        execute.executeAction(request, response, mapping);
                    }
                }
            } finally {
                prepare.cleanupRequest(request);
            }
        }
}

 
如有错误,欢迎大家指正。

 

 

 

2
1
分享到:
评论
4 楼 lolocomee 2010-04-16  
建议在判断uri前print一下,我的不是这个"/fckeditor/editor/filemanager/connectors"
3 楼 lolocomee 2010-04-16  
感谢,上传搞好了,希望没有后遗症。
2 楼 lolocomee 2010-04-16  
这样做其他不会有错吗?原来是
<!--过滤器名字  -->
<filter-name>struts2</filter-name>
<!-- 过滤器支持的struts2类  -->
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
其他的如验证的自定义拦截继承extends AbstractInterceptor,还能用不?
1 楼 chenjing1121 2010-03-09  
虽然现在用不着,但是以后用到的。收藏了

相关推荐

    struts2,fckeditor冲突解决

    在使用FCKeditor上传图片时,如果没有正确配置Action,Struts2可能无法识别或处理上传请求。因此,你需要在`struts.xml`文件中为FCKeditor的上传操作创建一个专门的Action,并设置相应的接收路径。 2. **文件上传...

    Struts2与FCKeditor的整合.doc

    如果Struts2的filtermapping配置为"/*",可能与ConnectorServlet冲突,此时需要在struts.xml中添加excludePattern常量来解决这个问题。 3. 为了实现图片上传功能,你需要拷贝以下6个jar包到你的Web项目的lib目录下...

    struts2+fckeditor

    Struts2是一个非常流行的...如果遇到任何错误,建议检查服务器日志,它们通常会提供错误的具体信息,帮助你定位并解决问题。同时,学习并理解Struts2的拦截器机制和FCKeditor的工作原理,对于解决这类问题非常重要。

    Fckeditor完美结合Struts2 教程

    同时,需要返回一个JSON或XML响应,告知Fckeditor上传是否成功。 接下来,我们需要在页面中集成Fckeditor。在JSP页面中,使用以下HTML和JavaScript代码来创建编辑器实例: ```html &lt;%@ taglib prefix="s" uri="/...

    struts和fckeditor整合完整版

    将Struts与FCKeditor整合,主要是为了让用户在Web表单中能够方便地编辑和提交富文本内容。这个整合过程主要包括以下几个步骤: 1. **引入FCKeditor库**:首先需要将FCKeditor的JavaScript文件和相关资源(如CSS、...

    struts2+FCKeditor

    在Struts2中集成FCKeditor,可以为用户提供一个方便、功能丰富的文本输入界面,从而提升应用的用户体验。 首先,我们需要了解Struts2的基本架构。Struts2的核心是Action类,它负责处理用户的请求,与业务逻辑层交互...

    struts2+FCKeditor-2.3

    Struts2+FCKeditor-2.3 是一个集成解决方案,旨在为Java开发人员提供一个强大的文本编辑器,以便在Web应用程序中实现富文本输入。FCKeditor是一款开源的JavaScript组件,它允许用户在Web页面中编辑HTML内容,类似于...

    fckeditor 上传漏洞解决

    解决fckeditor 上传漏洞,类似asp;.jpg asp.jpg

    struts2+fckeditor关于信息发布的实例

    总之,这个"struts2+fckeditor关于信息发布的实例"提供了一个学习如何将Struts2的MVC架构与FCKeditor的富文本编辑功能相结合的好机会。通过实践这个实例,开发者可以更好地理解两者在Web应用中的实际应用,以及如何...

    兼容struts2的FCKEditor(插件).rar

    5. **文件上传**:FCKEditor支持文件上传功能,这需要在Struts2中配置文件上传拦截器,设置允许的最大文件大小和类型。同时,需要提供一个Action来接收并保存上传的文件。 6. **安全考虑**:整合过程中需要注意XSS...

    struts2下的FCKeditor插件

    struts2下的FCKeditor插件,解决了兼容问题,例子见本人上传的其他资源

    FCKeditor2.6 上传图片报错解决方案

    FCKeditor2.6 上传图片报错解决方案 用FCKeditor上传图片时出现XML request error:OK(200)错误。终结解决方案。 替换fckeditor\editor\filemanager\browser\default\js下面的fckxml.js

    fckeditor解决中文问题

    同时,提供的超详细说明配置步骤将帮助开发者快速理解和解决问题。 总的来说,处理FCKeditor的中文问题需要从字符编码、服务器配置和编辑器配置等多个角度入手。理解并掌握这些知识点,将有助于确保FCKeditor在中文...

    fckeditor2.6.4上传中文名问题解决方案

    解决FCKeditor上传中文名问题的常见方法可能包括: 1. **编码设置**:确保服务器和FCKeditor配置文件的编码设置一致,通常为UTF-8,以支持多语言字符。 2. **修改源码**:找到处理文件名的部分,可能在上传函数或...

    jsp编辑器 fckeditor

    综上所述,理解FCKeditor的功能和工作原理,熟悉Struts2的配置和拦截器机制,以及如何利用`commons-fileupload.jar`处理文件上传,是解决FCKeditor与Struts2兼容问题的关键。在实际开发中,开发者应仔细阅读`struts2...

    Struts2项目 jsp页面FCKeditor使用

    ### Struts2项目中JSP页面使用FCKeditor详解 #### 一、引言 FCKeditor是一款功能强大的在线富文本编辑器,广泛应用于各种Web应用程序中,特别是那些需要用户输入格式化文本的场景。在Struts2项目中集成FCKeditor...

Global site tag (gtag.js) - Google Analytics