NHẬN XÉT CỦA GVHD
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
i
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
LỜI CẢM ƠN
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
ii
LỜI CÁM ƠN Chúng em xin bày tỏ lòng biết ơn chân thành nhất ñến thầy ðặng Thanh Dũng,
người thầy ñã tận tâm giúp ñỡ, hướng dẫn chúng em thực hiện luận văn này.
Chúng con xin gửi lòng biết ơn và kính trọng sâu sắc ñến gia ñình, những người ñã
1. CHƯƠNG 1 – MỞ ðẦU 1
1.1. Tính cấp thiết của ñề tài 1
1.2. Mục tiêu của ñề tài 1
2. CHƯƠNG 2 – CƠ SỞ LÝ THUYẾT 4
2.1. Web Services 4
2.1.1. Tổng quan về Web Service 4
2.1.2. Các thành phần chính của Web Service 7
2.1.3. Tính bảo mật Web Service 12
2.2. Spring Web Service 13
2.2.1. Giới thiệu về Spring Framework và Spring Web Service 13
2.2.2. Contract-first 15
2.2.3. Tạo một web service trong Spring 44
MỤC LỤC
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
iv
2.2.4. Bảo mật web service trong Spring Web Service 70
v
DANH MỤC CÁC HÌNH VẼ
Hình
Nội dung Trang
1.1 Use case diagram của chương trình 2
2.1 Kiến trúc Web service 8
2.2 Cấu trúc của một message theo dạng SOAP 12
2.3 Cấu trúc các module trong Spring Web Service 16
2.4 Quá trình xử lý luồng ñi của MessageDispatcher 47
2.5 Những lớp liên quan ñến quá trình Pre-Invocation Handling 110
2.6 After Invocation Handling 114
3.1 Sơ ñồ chuyển trang 127
3.2 Màn hình ñăng nhập 128
3.3 ðăng nhập thành công 128
3.4 Xem danh sách áo dài 129
3.5 Xem chi tiết áo dài 129
3.6 Xem thông tin liên hệ 130
3.7 Xem danh sách ñơn ñặt hàng 130
DANH MỤC CÁC HÌNH VẼ
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
vi
3.8 Xóa khách hàng 131
3.9 Cấm/cho phép khách hàng 131
DANH MỤC CÁC BẢNG
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
Internet mở rộng thị trường, tìm thêm cơ hội cho sản phẩm, dịch vụ của mình ñã trở
thành ñiều mà các doanh nhân, doanh nghiệp Việt Nam không thể không quan tâm.
Có thể trước mắt, khi phần lớn các Website thương mại ñiện tử ở Việt Nam chưa
thực hiện giao dịch trực tuyến thì bảo mật chưa thật sự quan trọng, nhưng về lâu
dài, khi các giao dịch thương mại ñiện tử trở thành xu thế tất yếu thì nếu ít quan tâm
ñến bảo mật sẽ rất khó ñể tự bảo vệ mình.
Web service ra ñời ñã mở ra một hướng mới trong việc phát triển các ứng dụng trên
Internet. Chính vì thế sự an toàn của web service trên mạng cũng không thể nằm
ngoài vấn ñề này, có thể nói ngày nay ngoài việc nghiên cứu làm sao ñể tạo ra một
web services tốt mang lại nhiều lợi ích thì việc nghiên cứu ñể làm sao mang lại sự
an toàn cho web services cũng là một trong những vấn ñề quan trọng nhất.
Chính vì thế, cần thiết phải có nhiều ñề tài nghiên cứu về bảo mật mạng và những
công cụ thực hiện bảo mật ñể có thể áp dụng chúng cho thực tế nước ta hiện nay.
1.2. Mc tiêu ca ñ tài
Mục tiêu chính của ñề tài gồm:
• Nghiên cứu về web service và công nghệ Spring Web service.
CHƯƠNG 1 MỞ ðẦU
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
2
• Nghiên cứu về các ứng dụng Acegi Security ñể bảo mật web service trong
Spring.
• Viết một ứng dụng web nhỏ bán hàng trên mạng bằng web service mô phỏng
việc dùng Acegi Security ñể bảo mật.
Các tính năng của chương trình mà chúng tôi ñang xây dựng có thể ñược biểu diễn
trong use case diagram sau (Xem hình 1.1):
Xoa User
Xem don dat hang
Disable User
Enable User
Dat hang ðặt hàng áo cưới
Xem thong tin lien he
Xem thông tin liên h
ệ của cửa
hàng
Dang ky thanh vien Dang ky thanh vien
Dang nhap vao he thong Dang nhap vao he thong
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
4
2.
CHƯƠNG 2 – CƠ SỞ LÝ THUYẾT
Sau một thời gian nghiên cứu, nhóm ñã có một số kiến thức nhất ñịnh về Web
Service, Spring Web service và Acegi Security. ðây là cơ sở lý thuyết nền tảng cho
ứng dụng.
2.1. Web Services
2.1.1. Tổng quan về Web Service
2.1.1.1 Giới thiệu
Web Service là một công nghệ cho phép những ứng dụng có thể giao tiếp với nhau
trong những hệ ñiều hành và những ngôn ngữ lập trình ñộc lập với nhau. Một Web
Service là một giao diện phần mềm (software interface) mô tả một tập hợp các hành
ñộng (operation) có thể ñược truy cập trên toàn thế giới thông qua thông ñiệp XML
chuẩn. Nó sử dụng giao thức lấy ngôn ngữ XML làm nền, mô tả một hành ñộng
(operation) ñể thực thi hoặc dữ liệu ñể trao ñổi với Web Service khác.
WS cho phép:
• Giao tiếp giữa các dịch vụ trên bất kỳ hệ ñiều hành nào và viết bằng bất
kỳ ngôn ngữ nào.
• Conceptualize application functions into task, leading to task-oriented
development and workflows. This allows a higher abstraction of software
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
6
• Sau khi thực hiện xong phương thức, server sẽ gửi kết qủa tới client bằng
một thông ñiệp SOAP response chứa thông tin ñược yêu cầu hoặc thông
báo lỗi trong trường hợp sự cố hoặc yêu cầu sai.
2.1.1.3 Kiến trúc của công nghệ Web Service
Hình 2.1 mô tả kiến trúc của công nghệ Web Service. Trong ñó bao gồm các tầng:
• Tầng vận chuyển với những giao thức chuẩn là HTTP, SMTP và JMS.
• Tầng giao thức tương tác dịch vụ ( Service Communication Protocol) với
giao thức chuẩn SOAP ( Simple Object Access Protocol). SOAP là giao
thức nằm giữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, SOAP
cho phép người dùng triệu gọi một service từ xa thông qua một message
XML. Có thể nói, SOAP là một giao thức giao tiếp có cấu trúc như XML
và mã hóa thành ñịnh dạng chung cho các ứng dụng trao ñổi với nhau.
• Tầng mô tả dịch vụ (Service Description) với công nghệ chuẩn là WSDL
và XML. WSDL(Web Services Description Language) là một ngôn ngữ
dựa trên cú pháp XML dùng ñể mô tả một web service. WSDL như một
file ứng dụng trung gian ñứng giữa web service và web service client.
• Tầng dịch vụ ( Service): cung cấp các chức năng của service.
• Tầng ñăng ký dịch vụ (Service Registry) với công nghệ chuẩn là UDDI
(Universal Description, Discovery and Integration). ðể có thể sử dụng
các dịch vụ, trước tiên client phải tìm dịch vụ, ghi nhận thông tin về cách
sử dụng dịch vụ và biết ñược ñối tượng cung cấp dịch vụ. UDDI ñịnh
nghĩa những thông tin này ñể cho phép các doanh nghiệp (là các client)
tìm kiếm và ñăng ký web service.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
<xsd:schema />*
</types>
</definitions>
• Phần tử “message”: ñịnh nghĩa các thông ñiệp ñược trao ñổi.
<definitions >
<message name="nmtoken"> *
<part name="nmtoken" element="qname"?
type="qname"?/> *
</message>
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
9
</definitions>
• Phần tử”portType”: ñịnh nghĩa một tập các chức năng web service hỗ trợ
và thông ñiệp tương ứng ñối với mỗi chức năng ñó.
• WSDL ñịnh nghĩa bốn kiểu thao tác mà một cổng có thể hỗ trợ:
o One-way: cổng nhận một message, message ñó là message nhập.
o Request-response: cổng nhận một message và gửi một message
phản hồi.
o Solicit-response: cổng gửi một message và nhận về một message.
o Notification: cổng gửi một message, message ñó là message xuất.
Mỗi kiểu thao tác có cú pháp biến ñổi tùy theo: thứ tự của các
message nhập, xuất và lỗi.
<wsdl:definitions >
<wsdl:portType name="nmtoken">
<wsdl:operation name="nmtoken" /> *
</wsdl:portType>
</wsdl:definitions>
• Phần tử “binding”: sau khi ñã ñịnh nghĩa các port, ta cần chỉ rõ ràng buộc
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
11
Hình 2.2 - Cấu trúc của một message theo dạng SOAP
2.1.2.3 UDDI
2.1.2.3.1. Giới thiệu
ðể có thể sử dụng các dịch vụ, trước tiên client phải tìm dịch vụ, ghi nhận thông tin
về cách sử dụng dịch vụ và biết ñược ñối tượng cung cấp dịch vụ. UDDI ñịnh nghĩa
một số thành phần cho biết trước các thông tin này ñể cho phép các client truyz tìm
và nhận lại những thông tin yêu cầu sử dụng web services.
2.1.2.3.2. Cấu trúc của UDDI
Cấu trúc UDDI gồm các thành phần:
• Trang trắng - White pages: chứa thông tin liên hệ và các ñịnh dạng chính
yếu của web services, chẳng hạn tên giao dịch, ñịa chỉ,… Những thông
tin này cho phép các ñối tượng khác xác ñịnh ñược service.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
12
• Trang vàng - Yellow pages: chứa thông tin mô tả web services theo
những chủng loại khác nhau. Những thông tin này cho phép các ñối
tượng thấy web services theo từng chủng loại của nó.
• Trang xanh - Green pages: chứa thông tin kỹ thuật mô tả các hành vi và
các chức năng của web services. Các ñối tượng dựa vào ñặc ñiểm của
web services ñể tìm kiếm.
2.1.3. Tính bảo mật Web Service
2.1.3.1 Giới thiệu
WS - Security là một chuẩn an toàn bao trùm cho SOAP và cả những phần mở rộng
của SOAP, nó ñược dùng khi muốn xây dựng những web service toàn vẹn và tin
cấp thông tin chữ ký trong message phản hồi.
2.2. Spring Web Service
2.2.1. Giới thiệu về Spring Framework và Spring Web Service
2.2.1.1 Giới thiệu Spring Framework
Spring là một application framework mã nguồn mở, ñược giới thiệu vào năm 2002.
Rod Johnson ñã ñưa ra ý tưởng này từ kinh nghiệm làm việc với kiến trúc J2EE.
Ông ta ñã viết cuốn sách với tiêu ñề: “J2EE Develoment without using EJB” ñể giới
thiệu khái niệm trình chứa hạng nhẹ (lightweight container). Với lý luận: EJB thì có
giá trị của nó, nhưng không phải lúc nào cũng cần thiết và phù hợp cho tất cả các
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
14
ứng dụng.
Thay vì EJB, Spring sử dụng Java bean, với một vài sự thay ñổi ñể thu ñược tất cả
các thuận lợi mà môi trường EJB ñưa ra. Do ñó Spring là một sự lựa chọn khác so
với EJB
2.2.1.2 Giới thiệu Spring Web Service
Spring web services là một sản phẩm của Spring community tập trung vào việc tạo
những sản phẩm Web Service. Spring web service nhắm vào việc làm nhẹ nhàng sự
phát triển contract-first SOAP services. Cho phép tạo ra những web service linh
ñộng sử dụng những cách khác nhau ñể ñiều khiển XML payload.
2.2.1.3 Môi trường runtime
Spring Web Services chạy với Java 1.3. Nó cũng hỗ trợ Java 5.0, mặc dù loại Java
ñược ñặc tả cho phiên bản này ñược ñóng gói thành module với gói jar có ñuôi là
“tiger”. Module bảo mật cũng yêu cầu Java 5. Spring web service bao gồm một số
module sau:
• XML module (spring-xml.jar) chứa những class hỗ trợ XML cho Web
service. Module này có mục ñích chính cho Spring Web Service
Framwork, và không phải là Web service developer.
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
16
2.2.2.2 Vấn ñề không tương xứng Object/XML
Chúng ta gặp vấn ñề không tương xứng khi chuyển ñổi từ ñối tượng Java sang
XML. ðầu tiên, vấn ñề là tạo một XML element cho mỗi Java Object, chuyển ñổi
toàn bộ các property và field của Java thành sub-element hoặc là attribute. Tuy
nhiên, có một số vấn ñề không ñơn giản xảy ra: có sự khác biệt về nền giữa hai
ngôn ngữ như XML (và ñặc biệt là XSD) và mô hình ñồ họa của Java.
2.2.2.2.1. Phần mở rộng XSD
Trong Java, có một cách ñể thay ñổi hành vi của một lớp là tạo lớp con của nó, và
thêm hành vi mới trong lớp con ñó. Trong XSD, bạn có thể mở rộng một dạng dữ
liệu bằng cách hạn chế nó: ép giá trị ñúng cho các element và thuộc tính. Cụ thể
như ví dụ sau:
<simpleType name="AirportCode">
<restriction base="string">
<pattern value="[A-Z][A-Z][A-Z]"/>
</restriction>
</simpleType>
Kiểu như trên hạn chế một string XSD bằng một biểu thức phù hợp, chỉ cho phép 3
ký tự hoa. Nếu kiểu này ñược chuyển sang Java, chúng ta sẽ chỉ sử dụng ñơn giản là
java.lang.String; biểu thức trên sẽ mất trong quá trình chuyển ñổi, bởi vì Java không
cho phép những kiểu lọc như vậy.
2.2.2.2.2. Những loại không di chuyển ñược
Một trong những mục tiêu quan trọng của Web Service là trở nên tương thích: hỗ
trợ ña nền như Java, .Net, Python, v.v… Bởi vì hầu hết những ngôn ngữ trên có
những lớp thư viện khác nhau, bạn phải sử dụng một loại ñịnh dạng công cộng ñể
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
17
</all>
</complexType>
</element>
Contract này ñịnh nghĩa một yêu cầu lấy một ngày (date), mà trong mô tả trong kiểu
dữ liệu của XSD là một năm (year), một tháng (month), một ngày (day). Nếu chúng
ta gọi service này trong Java, chúng ta sẽ phải sử dụng cả java.util.Date hoặc là
java.util.Calendar. Tuy vậy, cả hai kiểu trên ñều mô tả thêm thời gian (time). Nên
chúng ta sẽ gửi dữ liệu mô tả ngày 4 tháng 4 năm 2007 vào nửa ñêm (2007-04-
04T00:00:00), không giống với 2007-04-04.
2.2.2.2.3. Cấu trúc vòng
Tưởng tượng chúng ta có một cấu trúc lớp ñơn giản như sau:
public class Flight {
private String number;
private List<Passenger> passengers;
// getters and setters omitted
}
public class Passenger {
private String name;
private Flight flight;
// getters and setters omitted
}