登錄驗證案例
* 需求
1. 訪問UserCRUD_case案例的資源,驗證其是否登錄
2. 若登錄了,則直接放行
3. 若未登錄,則跳轉到登陸界面,提示您尚未登錄,請先登錄
* 分析
* 如何判斷用戶是否登錄呢?
* 在UserCRUD_case案例中,我們在編寫用戶登錄LoginServlet時,登陸成功後進行了以下操作:
UserService service = new UserServiceImpl();
User loginUser = service.login(user);
if (loginUser != null){
System.out.println("登陸成功");
session.setAttribute("user", loginUser);
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
- 據此我們可以知道,若登陸成功,則在session中會存在一個名爲user的數據,所以我們可以通過查看session中是否存在user即可知道是否登錄;所以此登陸驗證便可以這樣實現:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String uri = request.getRequestURI();
if (uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/checkCodeServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fonts")){
chain.doFilter(req, resp);
}else{
Object user = request.getSession().getAttribute("user");
if (user != null){
chain.doFilter(req, resp);
}else{
request.setAttribute("login_error", "您尚未登錄,請先登錄!");
request.getRequestDispatcher("/login.jsp").forward(request, resp);
}
}
}
- 注意
我們在過濾資源時,並非要過濾登錄相關的資源,而登錄相關資源除了login.jsp;LoginServlet;驗證碼,還有css,js樣式;這些資源也一定不要攔截