過濾器不過濾某些地址例項
阿新 • • 發佈:2019-02-12
首先在web.xml 配置 引數
<param-name>noLoginPaths</param-name> 引數名可自取
然後在 Filter 中,建立一個 FilterConfig 的引用, 這個引用在init中初始化,並且能夠通過它獲取<init-param> 中的key和value ,<filter> <filter-name>LoginFilter</filter-name> <filter-class>com.imooc.filter.LoginFilter</filter-class> <init-param> <param-name>noLoginPaths</param-name> <param-value>login.jsp;fail.jsp;LoginServlet</param-value> </init-param> <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
StringnoLoginPaths=config.getInitParameter("noLoginPaths");
然後通過判斷使用者請求的url 是否符合 noLoginPaths 中設定的不過濾選項,如果如何,就呼叫do.filter放行
關鍵程式碼
if(noLoginPaths!=null){ String[] strArray = noLoginPaths.split(";"); for (int i = 0; i < strArray.length; i++) { if(strArray[i]==null || "".equals(strArray[i]))continue; if(request.getRequestURI().indexOf(strArray[i])!=-1 ){ arg2.doFilter(arg0, arg1); return; } } }
完整程式碼
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginFilter implements Filter { private FilterConfig config; @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; HttpSession session = request.getSession(); String noLoginPaths = config.getInitParameter("noLoginPaths"); String charset = config.getInitParameter("charset"); if(charset==null){ charset = "UTF-8"; } request.setCharacterEncoding(charset); if(noLoginPaths!=null){ String[] strArray = noLoginPaths.split(";"); for (int i = 0; i < strArray.length; i++) { if(strArray[i]==null || "".equals(strArray[i]))continue; if(request.getRequestURI().indexOf(strArray[i])!=-1 ){ arg2.doFilter(arg0, arg1); return; } } } if(session.getAttribute("username")!=null){ arg2.doFilter(arg0, arg1); }else{ response.sendRedirect("login.jsp"); } } @Override public void init(FilterConfig arg0) throws ServletException { config = arg0; } }