您好,登錄后才能下訂單哦!
本文實例為大家分享了用Filter實現登錄權限驗證的具體代碼,供大家參考,具體內容如下
用戶在訪問任何界面時,會查詢用戶是否登錄過,如果登錄過則可以直接訪問,沒有登錄的話跳到登錄界面
web.xml配置過濾器
<filter> <filter-name>myFilter</filter-name> <filter-class>com.zyk.ctrl.MyFilter</filter-class> <!-- 配置初始化參數,指明再沒有登錄的情況下放行的資源 --> <init-param> //初始化參數名 <param-name>letgo</param-name> //初始化參數值 <param-value>/login.jsp;/loginServlet;/css;/images;/js</param-value> </init-param> </filter> <filter-mapping> //必須和上面的一樣 <filter-name>myFilter</filter-name> //過濾所有 <url-pattern>/*</url-pattern> </filter-mapping>
MyFilter.java
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.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet Filter implementation class MyFilter */ public class MyFilter implements Filter { //定義一個存放放行資源路徑的數組 private static String[] paths; /** * Default constructor. */ public MyFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; //獲取資源URI路徑 String path = request.getServletPath(); for (int i = 0; i < paths.length; i++) { //如果當前請求的URI路徑是要放行的資源中的一個,放行 if (path.startsWith(paths[i])) { chain.doFilter(request, response); return;//放行之后返回,避免程序繼續執行,往下面執行是攔截的代碼 } } //判斷用戶是否已經登錄,如果登錄則放行資源,否則重定向到登錄界面 String name = (String) request.getSession().getAttribute("name"); //如果name為空,則證明用戶沒有登錄過,跳轉到登錄界面 if (name==null) { request.getSession().setAttribute("error", "尚未登錄,請登錄"); response.sendRedirect("/BookManagerSystem/login.jsp"); return; } //剩下的情況為已登錄,放行 chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { //讀取初始化參數,得到放行的資源 String initParameter = fConfig.getInitParameter("letgo"); paths =initParameter.split(";"); } }
Servlet.java部分代碼
if ("login".equals(action)) { String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); User user = new User(name, pwd); if (dao.ValidateLogin(user)) { //ValidateLogin為登錄驗證方法,如果驗證成功,則設置一個屬性名為“name”值為用戶名的session,用于Myfilter驗證是否登錄過 request.getSession().setAttribute("name", name); response.sendRedirect("admin/admin.jsp"); } else { request.getSession().setAttribute("error", "賬號或者密碼錯誤"); response.sendRedirect("login.jsp"); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。