在做的項目需要用到cas,而使用cas的話,需要在client的webapp的web.xml中配置好多個filter,但是需要兼容到老的邏輯,如果滿足某些條件,就不走cas的filter,滿足另外一些條件,只走cas的其中幾個filter,那該怎么進行filter的相關配置呢?
從網上搜到了一片blog:http://blog.csdn.net/tandaly/article/details/8687671,里面講述了兩種方式。
第一種是給filter設置標識。我目前考慮,在自己項目中采取這種為filter加標識的方式:
publicclass FirstFilter implementsFilter { //... publicvoid doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throwsIOException, ServletException { servletRequest.setAttribute("executeSecondFilter",true); //... if(someReason) servletRequest.setAttribute("executeSecondFilter",false);
servletRequest.setAttribute("executeThirdFilter",false);
servletRequest.setAttribute("executeForthFilter",true); filterChain.doFilter(servletRequest, servletResponse); } } publicclass SecondFilter implementsFilter { //.. publicvoid doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throwsIOException, ServletException { if(servletRequest.getAttribute("executeSecondFilter") == null|| !((Boolean) servletRequest.getAttribute("executeSecondFilter"))) { filterChain.doFilter(servletRequest, servletResponse); } //... } }
publicclass ThirdFilter implementsFilter {
//..
publicvoid doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throwsIOException, ServletException { if(servletRequest.getAttribute("executeThirdFilter") == null|| !((Boolean) servletRequest.getAttribute("executeThirdFilter"))) { filterChain.doFilter(servletRequest, servletResponse); } //... } }
filterChain.doFilter()的作用是跳轉到filter鏈的下一個filter。