使用Filter實(shí)現(xiàn)登錄權(quán)限驗(yàn)證
本文實(shí)例為大家分享了用Filter實(shí)現(xiàn)登錄權(quán)限驗(yàn)證的具體代碼,供大家參考,具體內(nèi)容如下
用戶在訪問(wèn)任何界面時(shí),會(huì)查詢用戶是否登錄過(guò),如果登錄過(guò)則可以直接訪問(wèn),沒(méi)有登錄的話跳到登錄界面
web.xml配置過(guò)濾器
<filter> <filter-name>myFilter</filter-name> <filter-class>com.zyk.ctrl.MyFilter</filter-class> <!-- 配置初始化參數(shù),指明再?zèng)]有登錄的情況下放行的資源 --> <init-param> //初始化參數(shù)名 <param-name>letgo</param-name> //初始化參數(shù)值 <param-value>/login.jsp;/loginServlet;/css;/images;/js</param-value> </init-param> </filter> <filter-mapping> //必須和上面的一樣 <filter-name>myFilter</filter-name> //過(guò)濾所有 <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 { //定義一個(gè)存放放行資源路徑的數(shù)組 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++) { //如果當(dāng)前請(qǐng)求的URI路徑是要放行的資源中的一個(gè),放行 if (path.startsWith(paths[i])) { chain.doFilter(request, response); return;//放行之后返回,避免程序繼續(xù)執(zhí)行,往下面執(zhí)行是攔截的代碼 } } //判斷用戶是否已經(jīng)登錄,如果登錄則放行資源,否則重定向到登錄界面 String name = (String) request.getSession().getAttribute("name"); //如果name為空,則證明用戶沒(méi)有登錄過(guò),跳轉(zhuǎn)到登錄界面 if (name==null) { request.getSession().setAttribute("error", "尚未登錄,請(qǐng)登錄"); response.sendRedirect("/BookManagerSystem/login.jsp"); return; } //剩下的情況為已登錄,放行 chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { //讀取初始化參數(shù),得到放行的資源 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為登錄驗(yàn)證方法,如果驗(yàn)證成功,則設(shè)置一個(gè)屬性名為“name”值為用戶名的session,用于Myfilter驗(yàn)證是否登錄過(guò) request.getSession().setAttribute("name", name); response.sendRedirect("admin/admin.jsp"); } else { request.getSession().setAttribute("error", "賬號(hào)或者密碼錯(cuò)誤"); response.sendRedirect("login.jsp"); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
HDFS?Balancer負(fù)載均衡器及語(yǔ)法詳解
這篇文章主要為大家介紹了HDFS?Balancer負(fù)載均衡器及語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Applet小應(yīng)用程序開(kāi)發(fā)簡(jiǎn)介
Applet小應(yīng)用程序開(kāi)發(fā)簡(jiǎn)介 ,用java開(kāi)發(fā)的小程序,需要的朋友可以參考下2012-09-09解決idea找不到或無(wú)法加載主類的錯(cuò)誤處理
這篇文章主要介紹了解決idea找不到或無(wú)法加載主類的錯(cuò)誤處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Java dom4j創(chuàng)建解析xml文檔過(guò)程解析
這篇文章主要介紹了Java dom4j創(chuàng)建解析xml文檔過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07java開(kāi)發(fā)中的誤區(qū)和細(xì)節(jié)整理
這篇文章給大家整理了關(guān)于JAVA開(kāi)發(fā)中的細(xì)節(jié)以及經(jīng)常進(jìn)入的誤區(qū)整理,希望我們整理的內(nèi)容能夠給大家提供到幫助。2018-04-04Java實(shí)現(xiàn)通過(guò)IP獲取IP歸屬地的方法(離線+在線)
我們都知道安全攻擊都是在某臺(tái)客戶機(jī)上執(zhí)行某些惡意操作致使服務(wù)端響應(yīng)異常崩潰亦或響應(yīng)數(shù)據(jù)被篡改,首先我想到的是對(duì)訪問(wèn)的web端做一個(gè)IP的校驗(yàn),那么我們首先得知道客戶端的IP是多少,接下來(lái)此文重點(diǎn)介紹如何獲得,需要的朋友可以參考下2023-10-10