struts2使用FilterDispatcher進(jìn)行url過濾,默認(rèn)是所有的url都過濾,但是項目中有些url是不想用struts2進(jìn)行過濾的,網(wǎng)上搜了不少方法
1.修改web.xml文件。
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
只讓過濾器對加有.action后綴的路徑有效,如果需要攔截.jsp,加上*.jsp就行了。
但是這樣如果有無后綴名的url(如/demo/)就不能過濾了
2.修改struts2核心jar中的default.properties文件
把struts.action.extension=action,,
改為struts.action.extension=action,do,jsp,
但我改了之后發(fā)現(xiàn)根本沒效果,不知為何
3.自定義一個繼承StrutsPrepareAndExecuteFilter的過濾器,將配置換成自己自定義的過濾器。(推薦此法)
public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
//不過濾的url,可以不斷添加,如fck可用/fckeditor/editor/filemanager/connectors/fileupload,下面的是flex
if ("/fpms/messagebroker/amf".equals(request.getRequestURI())) {
//System.out.println("使用自定義的過濾器");
chain.doFilter(req, res);
}else{
//System.out.println("使用默認(rèn)的過濾器");
super.doFilter(req, res, chain);
}
}
}
修改web.xml
<!-- sturts2過濾器 -->
<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>
這種方法試驗成功
posted on 2010-10-15 11:54
wkkyo 閱讀(5800)
評論(2) 編輯 收藏 所屬分類:
Struts2