1.修改web.xml文件。
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
只让过滤器对加有.action后缀的路径有效。
2.自定义一个继承StrutsPrepareAndExecuteFilter的过滤器,将配置换成自己自定义的过滤器。(如果大项目改.action不实际,推荐此法)
对于链接多个文件(如:fckeditor和struts2的结合)
package com.olympus.sapg.smtinnovation.util.method;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
public class FCKFilter extends StrutsPrepareAndExecuteFilter
{
public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String URI = request.getRequestURI();
String[] uriArray = URI.split("/fckeditor/editor/filemanager/connectors/");
int arrayLen = uriArray.length;
if (arrayLen >= 2) {
chain.doFilter(req, res);
}else{
super.doFilter(req, res, chain);
}
}
}
单个链接的过滤器:
public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
//不过滤的url,可以自行添加
if ("/demo/fileupload".equals(request.getRequestURI())) {
//System.out.println("使用自定义的过滤器");
chain.doFilter(req, res);
}else{
//System.out.println("使用默认的过滤器");
super.doFilter(req, res, chain);
}
}
}
web.xml文件:
<filter>
<filter-name>struts2</filter-name>
<!-- 改为自己的过滤器 -->
<filter-class>
com.filter.ExtendStrutsFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>