Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Declarative Security in Servet

Trong bài viết này, chúng ta cùng nghiên cứu và triển khai 1 ứng dụng servlet có security ở mức khai báo. Với cách khai bào hợp lý, chúng ta sẽ làm cho trang web an toàn hơn.

Chúng ta cũng có thể lập trình cho việc security. Tuy nhiên có những hạn chế nhất định trong cách lập trình bởi nó phải gom chung việc xử lý nghiệp vụ luận lý và security trong cùng module khiến việc bảo trì, phát triển khó và khi có 1 thay đối nào đó của 1 trong  thì phải modify lại hết=> bất tiện. Hơn nữa việc lập trình cho security cũng chẵn dễ dàng gì.

Ở security mức khai báo, ta lập trình sevlet bình thường như  vẫn làm, điểm khác biệt là ta sẽ cấu hình security ở tập tin web.xml.

Ví dụ ở đây là chúng ta có 1 tài nguyên là trang Security.html và ta muốn giới hạn quyền truy cập đối với người dùng. Phương thức giới hạn ở đây chúng ta dùng Basic Authentication model. Điều đó có nghĩa là khi người sử dụng truy xuất đến trang này, web-browser sẽ hiển thị 1 form cho phép nhập username, password. Nếu việc đăng nhập thành công thì web-browser sẽ hiển thị trang Security.jsp còn không sẽ báo lỗi không tuy xuất tài nguyên được.

Các bước thiết kế:

1> Tạo 1 ứng dụng Dynamic web Project trong Eclipse, chọn Target Server là Tomcat. Đặt tên cho project là Servlet_Security_Declarative.

2. Thêm 1 trang html với nội dung bất kỳ. Giả sử ở đây như sau:

<html>
<head>
<title>Browser Based Declarative Authentication</title>
</head>
<body>
<h1> Browser Based Declarative Authentication</h1>
<h2>Write from:
<a href=”https://vovanhai.wordpress.com”&gt;
https://vovanhai.wordpress.com
</a>
</h2>
</body>
</html>

3. Cấu hình triển khai như  sau

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns=”http://java.sun.com/xml/ns/javaee&#8221; xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#8221; xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#8221; id=”WebApp_ID” version=”2.5″>
<display-name>Servlet_Security_Declarative</display-name>
<welcome-file-list>
<welcome-file>Security.html</welcome-file>
</welcome-file-list>
<security-constraint>
<web-resource-collection>
<web-resource-name>Success</web-resource-name>
<url-pattern>/Security.html</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
<realm-name>default</realm-name>
</login-config>
</web-app>

Ở đây chúng ta chú ý đến các thẻ <security-constraint> có ý nghĩa chỉ định tài nguyên cần bảo vệ và <login-config> chỉ định cách thức authentication(ở đây là basic authentication model).

Thẻ <auth-constraint> chỉ nhóm (roles) nào sẽ được phép truy xuất đến tài nguyên này. Ở đây là tất cả các user thuộc role manager là được phép.

4. Cấu hình user:

Bạn cần phải cấu hình user để có thể sừ dụng tài nguyên này bằng cách: Trong thư mục %TOMCAT_HOME%\conf bản mở file tomcat-users.xml lên. Bạn có thể xem xét, hiệu chỉnh theo ý mình. Ví dụ nội dung của file này được chỉnh như  sau:

<?xml version=’1.0′ encoding=’utf-8′?>
<tomcat-users>
<role rolename=”manager”/>
<role rolename=”standard”/>
<role rolename=”admin”/>
<role rolename=”employee”/>
<user username=”ty” password=”ty” roles=”employee”/>
<user username=”teo” password=”teo” roles=”employee,manager”/>
<user username=”admin” password=”admin” roles=”standard,manager,admin”/>
</tomcat-users>

5. Thực thi ứng dụng

Sau khi triển khai, bạn đến URL http://localhost:8080/Servlet_Security_Declarative/Security.html bạn sẽ bị hỏi bởi 1 cửa sổ như hình sau:
declarative_security_servlet_01

Bạn nhập vào username là admin, password là admin kết quả sẽ như  sau:
declarative_security_servlet_02
Còn nếu bạn nhập dữ liệu không đúng sau 3 lần hoặc bạn đóng cửa sổ này, kết quả sẽ như sau
declarative_security_servlet_03

Lưu ý ở đây là đối với kiểu authentication BASIC thì dữ liệu chuyền đi(username, password) sẽ không được mã hóa gì cả mà chỉ là dạng plaintext. Bạn có thể tham khảo thêm để dùng DIGEST authentication mode với dữ liệu được mã hóa dưới dạng hash hoặc HTTPs authentication model có sử dụng SSL.

Chúc các bạn thành công!

One Response to “Declarative Security in Servet”

  1. huy1503 said

    Phần 3,cấu hình triển khai mở ở đâu vậy anh ? thank anh trước,em mới học nên chưa biết ạ😦

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: