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 ñã
nuôi dạy chúng con trưởng thành.
Chúng em chân thành cảm ơn quý thầy cô trong khoa Công nghệ thông tin trường
ðại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh ñã tận tình giảng dạy, hướng
dẫn, giúp ñỡ chúng em trong suốt quá trình học cũng như hoàn thành luận văn này.
Mặc dù ñã cố gắng hết sức nhưng chắc chắn luận văn còn nhiều thiếu sót, chúng
em mong nhận ñược sự thông cảm, chỉ bảo của quý thầy cô cùng các bạn.
Tp.HCM ngày 31/12/2007
Lương Nguyễn Hải ðăng-ðoàn Huỳnh Cẩm Duyên
MỤC LỤC
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
iii
MỤC LỤC
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN i
LỜI CÁM ƠN ii
MỤC LỤC iii
DANH MỤC CÁC HÌNH VẼ v
DANH MỤC CÁC BẢNG vii
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
2.3. Acegi Security 91
2.3.1. Giới thiệu 91
2.3.2. Authentication 92
2.3.3. Authorization 104
2.4. Kết luận 125
3. CHƯƠNG 3 – THIẾT KẾ VÀ CÀI ðẶT 127
3.1. Thực tế 127
3.2. Sơ ñồ chuyển trang 127
3.3. Cài ñặt giao diện 128
4. CHƯƠNG 4 – KẾT LUẬN 132
4.1. Tóm tắt các kết quả ñạt ñược 132
4.2. Hướng phát triển 132
TÀI LIỆU THAM KHẢO 133
DANH MỤC CÁC HÌNH VẼ
KLTN –WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
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
vii
DANH MỤC CÁC BẢNG
Bảng
Nội dung Trang
1.1 Mô tả các use case 2
2.1 Bảng sử dụng KeyStore 74
CHƯƠNG 1 MỞ ðẦU
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
1
1.
CHƯƠNG 1 – MỞ ðẦU
1.1. Tính cp thit ca ñ tài
Cách ñây vài năm, khi nói tới thế kỷ 21, người ta khẳng ñịnh ñó sẽ là thời ñại của
“nền kinh tế số” với “thương mại ñiện tử” là then chốt. Thông tin và các giao dịch
ñược số hóa sẽ làm ñảo lộn nền kinh tế thế giới Làm sao ñể có thể tận dụng
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
Admin
Xem san pham
Dat hang
Xem thong tin lien he
Dang nhap vao he thong
User
Dang ky thanh vien
Hình 1.1 – Use case diagram của chương trình
Nội dung chi tiết của các use case ñược cho trong bảng 1.1
CHƯƠNG 1 MỞ ðẦU
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
3
Bảng 1.1: Mô tả các use case
Tên use case Mô tả
Actor Admin
Xoa User
Xóa một User trong danh sách
User
Disable User Loại bỏ các quyền của User.
Enable User
Khôi phục các quyền cho
User
Xem don dat hang Xem ñơn ñặt hàng của khách
Dang nhap vao he thong Dang nhap vao he thong
Actor user
Xem san pham
Xem sản phẩm áo cưới hiện
có ở cửa hàng
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
that can be employed by less software-technical users that work on
business level analytics.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
5
• Cho phép sự kết hợp lỏng lẻo, có nghĩa là mối tương tác giữa các ứng
dụng dịch vụ sẽ không bị ngắt khi có sự thay ñổi ở một hay nhiều dịch
vụ.
• Gắn vào một ứng dụng có sẵn ñể thay ñổi phù hợp với ñiều kiện của
doanh nghiệp và yêu cầu của khách hàng.
• Cung cấp những ứng dụng có sẵn hoặc thừa kế lại với những giao diện
dịch vụ mà không thay ñổi ứng dụng ban ñầu, cho phép chúng toàn quyền
hoạt ñộng trong môi trường dịch vụ.
• ðem lại những chức năng quản trị và quản lý như là: ñộ tin cậy
(reliability), trách nhiệm giải trình (accountability), bảo mật (security),…
ñộc lập với những chức năng chính, ñiều này làm cường tính linh hoạt và
hữu dụng trong môi trường tin học của doanh nghiệp.
2.1.1.2 Cách thức làm việc của Web Service
• Client không chứa bất cứ thông tin về các dịch vụ web hiện thời, vì vậy
trước hết nó phải ñi tìm dịch vụ web nào phù hợp với yêu cầu. Client sẽ
liên hệ với UDDI registry ñể hỏi về ñiều này.
• UDDI registry sẽ trả lời cho chúng ta biết server nào cung cấp dịch vụ mà
client cần.
• Sau khi biết ñược nơi cung cấp dịch vụ, client cần phải biết cách thức gọi
dịch vụ. Vì thế nó phải hỏi server ñể có ñược mô tả chi tiết cách gọi dịch
vụ.
• Server sẽ trả lời thông qua một ngôn ngữ chung là WSDL.
• Tại bước này client sẽ gửi một SOAP message tới server, yêu cầu nó thực
hiện một phương thức mà server có khả năng cung cấp.
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
7
• Bên cạnh ñó ñể cho các service có tính an toàn, toàn vẹn và bảo mật
thông tin trong kiến trúc web service chúng ta có thêm các tầng Policy,
Security, Transaction, Management giúp tăng cường tính bảo mật, an
toàn và toàn vẹn thông tin khi sử dụng service.
Hình 2.1 - Kiến trúc của Web Service
2.1.2. Các thành phần chính của Web Service
2.1.2.1 WSDL
2.1.2.1.1. Tổng quát
WSDL là một tài liệu dựa trên cú pháp XML dùng ñể mô tả một web service nó
ñóng vai trò trung gian giữa web service và web service client.
Trong tài liệu WSDL chúng ta sẽ ñịnh nghĩa các phương thức ñược web service hỗ
trợ, các kiểu dữ liệu ñược sử dụng trong các phương thức cùng các thông ñiệp ñược
trao ñổi giữa client và server ứng với mỗi phương thức.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
8
2.1.2.1.2. Cấu trúc tài liệu WSDL
Hình 2.2 - Cấu trúc WSDL
Trong một file WSDL phần tử gốc ñược ñặt tên “definitions”. Phần tử này chứa
năm phần tử con chính ñể ñịnh nghĩa web service:
• Phần tử “types”: ñịnh nghĩa các kiểu dữ liệu dùng ñể trao ñổi giữa client
và server (chỉ ñịnh nghĩa các kiểu dữ liệu phức tạp như structure,
class…).
<definition >
<types>
<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
giữa các port này và các giao thức tầng dưới.
• Phần tử “service”: có tác dụng gom các port ñã ñịnh nghĩa thành từng
nhóm.
<wsdl:definitions >
<wsdl:service name="nmtoken"> *
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
10
<wsdl:port />*
</wsdl:service>
</wsdl:definitions>
2.1.2.2 SOAP
2.1.2.2.1. Giới thiệu
SOAP (Simple Object Access Protocol) provides a simple and lightweight
mechanism for exchanging structured and typed information between peers in a
decentralized, distributed environment using XML.
2.1.2.2.2. Cấu trúc của một message theo dạng SOAP
SOAP message là một văn bản XML bình thường bao gồm các phần tử sau:
• Phần tử gốc - envelop: phần tử bao trùm nội dung message, expressing
what is in a message; who should deal with it, and whether it is optional
or mandatory.
• Phần tử ñầu trang - header: chứa các thông tin mô tả SOAP message và
thông tin nơi nhận, phần tử này không bắt buộc khai báo trong văn bản.
Nó có thể mang những dữ liệu chứng thực, những chữ ký số hóa, và
thông tin mã hóa…
• Phần tử khai báo nội dung chính trong thông ñiệp - body, chứa các thông
tin yêu cầu và phản hồi.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
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ậy. WS - Security cung cấp nhiều hỗ trợ cho nhiều cơ chế an toàn khác nhau, nhiều
khuôn dạng chữ ký, và nhiều công nghệ mã hóa. Nó ñảm bảo cho tính an toàn, sự
toàn vẹn thông ñiệp, và tính tin cậy của thông ñiệp.
2.1.3.2 Những bước cần thiết ñể tạo sự an toàn thông tin trong một
ứng dụng
ðể một ứng dụng an toàn và tin cậy, client và server phải có tính toàn vẹn thông tin.
Cấu hình tính toàn vẹn trong một ứng dụng ñược thực hiện qua các bước sau:
1. Phía client:
• Chỉ rõ những thành phần của message mà phải có chữ ký hay một dấu
hiệu chứng thực nào ñó. Những thành phần trong message có thể có chữ
ký là phần thân.
• Chỉ rõ một khóa trên hệ thống tập tin mà sẽ ký lên message. Chỉ những
client ñã ñược cấp quyền mới có quyền sở hữu khóa này.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
13
• Chỉ rõ những giải thuật sẽ ñược sử dụng bởi khóa ñể ký lên message.
• Nếu một client chờ ñợi một sự phản hồi từ server với thông tin cũng yêu
cầu phải toàn vẹn, thì client phải ñược cấu hình ñể làm cho có hiệu lực
tính toàn vẹn của message phản hồi.
2. Phía server:
• Cấu hình server ñể an toàn thông tin cần.
• Chỉ rõ những thành phần của message cần ñược ký. Nếu message ñến
không có một chữ ký hợp lệ, thì yêu cầu sẽ thất bại.
• Chỉ rõ một khóa ñể duyệt chữ ký của message ñến xem có hợp lệ hay
không.
• Chỉ rõ giải thuật mà khóa sử dụng làm cho có hiệu lực tính toàn vẹn của
message gửi ñến.
• Nếu có message phản hồi lại thì message ñó cũng phải ñược ký, và cung
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.
• Gói Core (spring-Web Service-core.jar và spring-Web Service-core-
tiger.jar) là phần trung tâm của của chức năng Spring web service. Nó
cung cấp những interfaces chính như WebserviceMessage và
SoapMessage, framwork server-side, với sự phân phối thông ñiệp rất
mạnh, và những class hỗ trợ việc ñịnh nghĩa endpoint của Web service;
cuối cùng là client-side WebServiceTemplate.
• Gói Security (spring-Web Service-security.jar) cung cấp ñịnh nghĩa của
Web Service-Security mà hợp nhất với gói Core. Nó cho phép bạn thêm
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
15
những token cơ bản, chữ ký, mã hóa và giải mã thông ñiệp SOAP. Thêm
vào ñó, nó cho phép bạn ñẩy ñịnh nghĩa Acegi security cho authentication
và authorization.
• Gói OXM (spring-oxm.jar và spring-oxm-tiger.jar) cung cấp sự phân
phối cho những API XML thông dụng bao gồm JAXB 1 và 2.
Hình dưới ñây mô tả các module trong Spring-Web Service và sự phụ thuộc
giữa chúng. Mũi tên diễn tả sự phụ thuộc, ví dụ như Spring-Web Service core
phụ thuộc vào Spring-XML và Spring-OXM.
Hình 2.3-Cấu trúc các module trong Spring Web Service
2.2.2. Contract-first
2.2.2.1 Giới thiệu
Khi tạo Web service, có 2 dạng phát triển: Contract Last và Contract First. Khi sử
dụng Contract-last, bạn bắt ñầu với Java code, và ñể cho Web service contract sinh
ra từ ñó. Còn với contract-first, bạn bắt ñầu với WSDL contract, và sử dụng Java ñể
ñịnh nghĩa contract. Spring-Web Service chỉ hỗ trợ dạng contract-first.
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
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
giao tiếp giữa chúng. Loại ñịnh dạng ñó là XML ñược hỗ trợ bởi tất cả các ngôn
ngữ này.
Bởi vì sự biến ñổi này, nên bạn phải chắc chắn rằng bạn phải sử dụng kiểu có thể
chuyển ñổi ñược trong service của bạn. Ví dụ như một service trả về
java.util.Treemap như:
public Map getFlights() {
// use a tree map, to make sure it's sorted
TreeMap map = new TreeMap();
map.put("KL1117", "Stockholm");
return map;
}
Nội dung của map này có thể chuyển ñổi sang một số loại của XML, nhưng từ khi
không có một cách chuẩn nào ñể mô tả một map trong XML, nó trở nên ñặc biệt.
Mặc dù, cho dù nó có thể chuyển ñổi sang XML, nhưng nhiều nền khác không có
cấu trúc dữ liệu giống với Treemap. Vì vậy nên khi một client .NET truy cập Web
service của bạn, nó có thể dùng System.Collections.Hashtable, cái này thì có ngữ
nghĩa khác.
Vấn ñề này cũng ñược giới thiệu khi làm việc trên Client side. Hãy xét một XSD
snippet sau, mô tả một service contract:
<element name="GetFlightsRequest">
<complexType>
<all>
<element name="departureDate" type="date"/>
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
KLTN – WEB SERVICE SECURITY WITH OPEN SOURCE ACEGI AND APPLYING FOR A SMALL RETAILING WEBSITE
18
<element name="from" type="string"/>
<element name="to" type="string"/>
</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
}