Saturday, July 12, 2014

Login and Logout

Vấn đề

Như chúng ta đã biết thì trong bất kì một dự án nào liên quan đến quản lý thì đều phải có thao tác đăng nhập và đăng xuất.

Vậy trong Java Servlet chúng ta sẽ làm chúng như thế nào? Trong bài này chúng ta hãy cùng tìm hiểu và làm một demo nho nhỏ về Login và Logout.

I. Tài nguyên được bảo vệ và tài nguyên tự do truy cập

Ví dụ trong website của chúng ta có các tài nguyên là các trang: Register.jsp , Login.jsp, ViewAllPost.jsp.

Trong số này thì Register.jsp và ViewAllPost.jsp là 2 tài nguyên được bảo vệ (bắt buộc phải đăng nhập để xác định quyền hạn truy cập).

Hình trên biểu diễn trình tự của  việc login.
Đầu tiên người dùng gửi một request đến, Filter Authenticate sẽ check xem liệu request đó có được phép truy cập vào tài nguyên không? Nếu như được phép thì cho phép tiếp tục truy cập. Nếu không thì chuyển request đến trang login. Nhiệm vụ của trang login là gửi thông tin đăng nhập của người dùng đến LoginServlet và check xem có đúng là tài khoản trong hệ thống không? Nếu đúng thì cho truy cập lại trang cũ. nếu không thì trả về trang Login.jsp.

Bắt đầu làm demo.

Đầu tiên chúng ta tạo 3 trang JSP là Register, Login, ViewAllPost và một filter là Authenticate. Filter Authenicate sẽ chặn lại request đến tất cả các trang trong hệ thống.
Trong Filter Authenticate chúng ta khai báo một phương thức như sau:

public boolean isFreeAccess(String url) {
        if ((!"".equals(url) && url.contains("Welcome")) || (!"".equals(url) && url.contains("LoginServlet.jsp"))) {
            return true;
        }
        return false;
    }

Phương thức này dùng để check và phân loại request.

Tiếp đến trong phương thức doFilter chúng ta viết những đoạn mã sau:

String url = httpRequest.getRequestURI();
        request.setAttribute("wantedUrl", url);

        if (isFreeAccess(url) || httpRequest.getSession().getAttribute("username") != null) {
            chain.doFilter(request, response);
        } else {
            RequestDispatcher dis = request.getRequestDispatcher("Login.jsp?url=" + url + "");
            dis.forward(request, response);
        }

Tiếp đến ở trang Login chúng ta khai báo một form có action="LoginServlet" và có 3 input. với type của 3 cái lần lượt là "text", "password","hidden" dùng để lấy thông tin của người dùng và truyền đường dẫn mà người dùng muốn truy cập.

Ở trong LoginServlet ta sẽ code nghiệp vụ tiến hành check thông tin của người dùng và chuyển hướng họ đến trang muốn đến nếu thông tin username và password cung cấp là chính xác.
Nếu không thì ta sẽ trở lại trang Login.jsp.

- Tiếp đến ta sẽ tạo ra thêm một servlet với tên là LogoutServlet. Khi gọi đến servlet này ta sẽ tiến hành huỷ bỏ session và chuyển hướng đến trang Login.jsp


Source bài viết: Login n Logout

No comments:

Post a Comment