struts2.1与FCKEditor 上传问题完美解决(原创)
2010-03-24 21:06
501 查看
最近,遇到了这个问题,使用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中原来的过滤器类路径,改为自己的这个。如下:
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.hs.fck.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
3.修改StrutsPrepareAndExecuteFilter.java,只需修改doFilter方法即可。如下:底色为绿色是修改的代码。也就是判断一下这个请求的servlet路径,如果是FCK的,就不执行包装。
Java代码
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);
}
}
}
搜索了一下,发现不少人遇到这个问题,而解决方案是修改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中原来的过滤器类路径,改为自己的这个。如下:
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.hs.fck.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter> <filter-name>struts2</filter-name> <filter-class>com.hs.fck.StrutsPrepareAndExecuteFilter</filter-class> </filter>
3.修改StrutsPrepareAndExecuteFilter.java,只需修改doFilter方法即可。如下:底色为绿色是修改的代码。也就是判断一下这个请求的servlet路径,如果是FCK的,就不执行包装。
Java代码
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);
}
}
}
相关文章推荐
- 解决结合struts 2 与FCKeditor 2.4 时利用FCK的上传功能时出现提示权限不足的问题
- PHP中完美解决fckeditor上传中文文件与新建中文目录出现乱码的问题
- PHP中完美解决fckeditor上传中文文件与新建中文目录出现乱码的问题
- 解决struts1上传超大文件引起的宕机问题
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 【Vegas原创】用正则表达式解决FCKEditor图片路径问题
- php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
- asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法
- fckeditor编辑器上传文件出现invalid Request问题解决
- 在线修改图片尺寸缩放网站(完美解决图片过大无法上传问题)
- 使用FCKeditor_2.6.3版本有关上传图片问题解决
- Fckeditor和struts2结合使用解决不能上传图片的问题
- asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法
- .NET下fckeditor动态设置文件上传路径,解决多用户多路径的问题。
- fckeditor编辑器上传文件出现invalid Request问题解决!
- 应用主题后FCKeditor上传问题的解决及相应的改进
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 解决struts组件上传附件速度很慢的问题
- FckEditor使用时遇到的两个问题,未能加载xxxx和上传图片无响应的解决方法
- JSF(JSP)中使用FCKeditor上传图片问题的解决