如果使用者沒有登陸直接通過url訪問其它頁面的解決辦法
阿新 • • 發佈:2019-02-10
專案的登陸功能是模組差不多都做完時候才加上的,由於專案都是用框架做的,現在想增加登陸功能,如果使用者直接通過url訪問其它頁面時候則返回到登陸頁面。
這次的解決方案是不依賴任何框架和jar包。就用最基本的servlet完成。思路是:如果使用者登陸成功則把使用者登陸的資訊存在session裡面,在過濾器中獲取session中剛剛存的值,如果存在表示使用者登陸成功,如果沒有表明使用者不合法,返回到登陸頁面。
下面是過濾器原始碼:
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; /* * 過濾器 */ public class LoginFilter implements Filter { // 需要定義系統頁面訪問中可放行的連線 private List<String> list = new ArrayList<String>(); public void init(FilterConfig arg0) throws ServletException { list.add("/index.jsp"); list.add("/LoginAction.do"); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; // 1、獲取頁面中的訪問的路徑連線 String path = request.getServletPath(); if (list != null && list.contains(path)) { // 如果頁面中獲取的訪問連線於定義的可放行的連線一致,則放行 chain.doFilter(request, response); return; } // 2、從session(flag)物件中獲取當前登入的使用者標誌 Object flag = request.getSession().getAttribute("flag"); if (flag != null) { // 如果從session中獲取的使用者物件不為空,則放行 chain.doFilter(request, response); return; } // 如果不滿足條件1和2,則不能放行,回到系統的登入頁面 response.sendRedirect(request.getContextPath() + "/"); } public void destroy() { } }
寫完過濾器後要在web.xml裡面配置一下。配置檔案:
把程式碼引到專案中後,該功能就可以完成了。原始碼已經上傳到資源裡面 下面是連結:http://download.csdn.net/detail/zl544434558/6870647<filter> <filter-name>filter</filter-name> <filter-class>com.dongbest.servlet.LoginFilter</filter-class> </filter> <!-- 攔截以.jsp結尾的連結 --> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <!-- 攔截以.do結尾的連結 --> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <!-- 設定session失效時間為30分鐘 --> <session-config> <session-timeout>30</session-timeout> </session-config>