使用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)文章
解決Springboot啟動(dòng)報(bào)錯(cuò):類文件具有錯(cuò)誤的版本61.0,應(yīng)為?52.0
這篇文章主要給大家介紹了關(guān)于解決Springboot啟動(dòng)報(bào)錯(cuò):類文件具有錯(cuò)誤的版本?61.0,應(yīng)為?52.0的相關(guān)資料,這是查閱了網(wǎng)上的很多資料才解決的,分享給大家,需要的朋友可以參考下2023-01-01
Java高并發(fā)編程之CAS實(shí)現(xiàn)無(wú)鎖隊(duì)列代碼實(shí)例
這篇文章主要介紹了Java高并發(fā)編程之CAS實(shí)現(xiàn)無(wú)鎖隊(duì)列代碼實(shí)例,在多線程操作中,我們通常會(huì)添加鎖來(lái)保證線程的安全,那么這樣勢(shì)必會(huì)影響程序的性能,那么為了解決這一問(wèn)題,于是就有了在無(wú)鎖操作的情況下依然能夠保證線程的安全,需要的朋友可以參考下2023-12-12
mybatis plus 自動(dòng)轉(zhuǎn)駝峰配置小結(jié)
SpringBoot提供兩種配置Mybatis的方式,第一種是通過(guò)yml或application.properties文件開(kāi)啟配置,第二種是使用自定義配置類,通過(guò)給容器添加一個(gè)ConfigurationCustomizer來(lái)實(shí)現(xiàn)更靈活的配置,這兩種方法可以根據(jù)項(xiàng)目需求和個(gè)人喜好選擇使用2024-10-10
Spring+MyBatis多數(shù)據(jù)源配置實(shí)現(xiàn)示例
本篇文章主要介紹了Spring+MyBatis多數(shù)據(jù)源配置實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
java指紋識(shí)別以及谷歌圖片識(shí)別技術(shù)源碼
這篇文章主要為大家詳細(xì)愛(ài)介紹了java指紋識(shí)別以及谷歌圖片識(shí)別技術(shù)源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
關(guān)于SpringBoot獲取IOC容器中注入的Bean(推薦)
本文通過(guò)實(shí)例代碼給大家詳解了springboot獲取ioc容器中注入的bean問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05
java觀察者模式實(shí)現(xiàn)和java觀察者模式演化
觀察者模式是經(jīng)典設(shè)計(jì)模式中很常用的一種,平常我們看到的監(jiān)聽(tīng)器,基本上都是采用這種設(shè)計(jì)模式實(shí)現(xiàn)的,這里探討一下觀察者模式的演化2014-02-02

