使用過濾器filter進行登入驗證
阿新 • • 發佈:2021-06-27
簡述
在常見的網站上,我們需要登入才能訪問到其他資源。一般來說我們的登入資訊會用session儲存,所以我們可以使用filter進行一個登入驗證的過濾。
package cn.itcast.web.filter; import com.sun.deploy.net.HttpRequest; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @WebFilter("/*") public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//0.強轉或者一個http req 和 response HttpServletRequest request = (HttpServletRequest) servletRequest; //1.判斷是否是登入相關的資源 String uri = request.getRequestURI(); //2.判斷是否包含登入相關資源路徑,注意要排除css和js資源 if(uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fronts/") || uri.contains("/checkCodeServlet")){//包含,證明想去登入 filterChain.doFilter(servletRequest,servletResponse); }else{ //不包含,需要驗證使用者是否登入 //3.從session中獲取user Object user = request.getSession().getAttribute("user"); if(user != null){ //登入了,放行 filterChain.doFilter(servletRequest,servletResponse); }else{ //證明沒有登入,跳轉到登入頁面 request.setAttribute("login_msg","您尚未登入"); request.getRequestDispatcher("login.jsp").forward(request,servletResponse); } } } @Override public void destroy() { } }