Tài liệu Giới thiệu Spring Roo, Phần 2: Phát triển một ứng dụng bằng Spring Roo - Pdf 10

Giới thiệu Spring Roo, Phần 2: Phát triển một ứng
dụng bằng Spring Roo
Để mở rộng ứng dụng hội nghị của mình, chúng ta cần tạo lại ứng dụng đó từ Phần 1. Bạn có thể
làm theo các hướng dẫn trước hoặc sử dụng lệnh script (tạo kịch bản lệnh) của Roo. Lệnh
script thực hiện tất cả các lệnh đã quy định trong một tệp tài nguyên. Nếu bạn đã làm theo
Phần 1, bạn đã nhận thấy rằng Roo đã tạo ra một tệp tên là log.roo, có tất cả các lệnh thực hiện
trên trình vỏ Roo. Chúng ta sẽ thực hiện tệp log.roo đó và tạo lại ứng dụng này.
1. Tệp này được bao gồm trong mã mẫu. Bạn có thể đổi tên nó là conference.roo.
2. Tạo một thư mục mới có tên là conference và sao chép conference.roo vào thư mục đó.
3. Mở trình vỏ dòng lệnh của hệ điều hành của bạn.
4. Chuyển đến thư mục conference mà bạn vừa tạo ra.
5. Thực hiện lệnh script file conference.roo.
Lệnh script sẽ tạo lại ứng dụng trong một vài giây nếu bạn có các JAR cần thiết trong kho lưu
trữ Maven của mình. Nếu không, sẽ mất nhiều thời gian hơn vì nó phải tải về tất cả các JAR.
Lệnh script rất có ích theo cách bạn có thể sử dụng nó như một khuôn mẫu để tạo ra các dự án
do Spring quản lý.
Trước khi chúng ta tiến lên, hãy nhập khẩu dự án Maven bằng STS. STS có đóng gói sẵn với
trình cắm thêm Eclipse Maven. Bạn nên nhập khẩu dự án này bằng cách chọn File > Import >
Maven > Existing Maven Projects (Các dự án Maven hiện có), sau đó chọn thư mục của dự án.
Chúng ta sẽ nhập khẩu dự án này bằng STS khi chúng ta sẽ viết một số mã tùy chỉnh sau.
Ứng dụng web mà chúng ta đã tạo ra cho đến nay vẫn hoạt động và chúng ta có thể kiểm tra nó
bằng thủ công nhờ tạo, đọc, cập nhật và xóa các thực thể Speaker (Người nói) và Talk (Cuộc
thảo luận). Nhưng nó sẽ không còn thú vị nữa phải không nếu chúng ta đã có thể tự động hoá
quá trình này?
Về đầu trang
Kiểm tra web được tự động hóa
Ở đây có kèm tính năng tiếp theo của Spring Roo là: hỗ trợ kiểm tra Selen. Selen là một tập các
công cụ rất mạnh hỗ trợ sự phát triển nhanh về tự động hóa kiểm tra cho các ứng dụng dựa trên
web. Để bổ sung hỗ trợ kiểm tra Selen vào ứng dụng của bạn, hãy thực hiện các lệnh sau:
selenium test controller ~.web.SpeakerController
selenium test controller ~.web.TalkController

dụng web được tạo ra bằng cách sử dụng Roo đều có các trình cắm thêm Maven cho các máy
chủ web Tomcat và Jetty. Để chạy selenium test, hãy thực hiện lệnh Maven mvn
selenium:selenese.
Lệnh này sẽ khởi động một trình duyệt Firefox để chạy các trường hợp kiểm tra Selen. Trong
quá trình thực hiện các bài kiểm tra này, bạn sẽ thấy một hình ảnh tương tự như Hình 1.

Hình 1. Các bài kiểm tra Selen

Hiện nay, bất cứ ai cũng có thể truy cập ứng dụng của chúng ta và thực hiện tạo, cập nhật và xóa
Speaker và Talk. Trong một ứng dụng thời gian thực, có vấn đề bảo mật đối với những người có
thể thực hiện hoạt động như vậy.
Về đầu trang
Bảo mật ứng dụng web
Roo sử dụng Spring Security (Bảo mật Spring) để bổ sung bảo mật vào ứng dụng của bạn trong
một dòng. Spring Security là một xác thực tùy chỉnh rất cao và mạnh mẽ và là một khung công
tác kiểm soát truy cập. Nó là tiêu chuẩn trên thực tế để bảo mật các ứng dụng dựa trên Spring.
Bổ sung Spring Security
Để thêm Spring Security, hãy gõ lệnh sau: security setup (thiết lập bảo mật).
Lệnh này sẽ thêm tất cả các tệp JAR của Spring Security cần thiết và sẽ thiết lập bảo mật cơ bản
cho ứng dụng của bạn. Lệnh này cũng tạo ra các tệp khác, nhưng có một tệp quan trọng là tệp
applicationContext security.xml, có tất cả các định nghĩa bean liên quan đến bảo mật. Ngữ cảnh
của tệp applicationContext-security.xml trông giống như nội dung trong Liệt kê 2. Tôi đã thay
thế mật khẩu được băm nhỏ với các dấu chấm chấm để làm cho nó dễ đọc hơn.

Liệt kê 2. Ngữ cảnh của applicationContext-security.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans \
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

</authentication-provider>
</authentication-manager>

</beans:beans>

Bảo mật được Roo cấu hình là tổng quát và không có tài liệu tham khảo nào cho ứng dụng của
chúng ta. Hãy nhớ rằng Roo trợ giúp về thiết lập hoặc cấu hình một ứng dụng để khởi đầu nhanh
chóng, nhưng trách nhiệm của nhà phát triển là tùy chỉnh sản phẩm cuối cùng. Trong trường hợp
này, Roo đã chỉ cung cấp một khuôn mẫu cho Spring Security và trách nhiệm của chúng ta là tùy
chỉnh nó theo nhu cầu của mình.
Tùy chỉnh Spring Security
Trong ứng dụng của chúng ta, bất kỳ ai cũng có thể tạo ra một Speaker, nhưng chỉ có một
Speaker có thể tạo ra một Talk. Chúng ta cần sửa đổi tệp applicationContext-security.xml như
dưới đây. Liệt kê 3 chỉ cho thấy một phần của XML cần sửa đổi.

Liệt kê 3. Sửa đổi tệp applicationContext-security.xml
<http auto-config="true" use-expressions="true">
<form-login login-processing-url="/resources/j_spring_security_check"
\
login-page="/login" authentication-failure-url="/login?login_error=t"/>
<logout logout-url="/resources/j_spring_security_logout"/>

<! Configure these elements to secure URIs in your application >
<intercept-url pattern="/talks/**" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/speakers/**" access="permitAll" />
<intercept-url pattern="/resources/**" access="permitAll" />
<intercept-url pattern="/**" access="permitAll" />
</http>

Tôi đã cập nhật intercept-url sao cho chỉ những người dùng có vai trò người dùng mới có thể

vào. Việc tra cứu cơ sở dữ liệu cho Speaker được thực hiện khi sử dụng bộ dò tìm do chúng ta đã
tạo ra ở trên. Nếu tìm thấy Speaker, thì GrantedAuthority ROLE_USER sẽ được gán cho
Speaker đó. Phương thức này cuối cùng trả về một đối tượng UserDetails đã điền vào nếu đăng
nhập thành công hay nếu không sẽ đưa ra một BadCredentialsException với thông báo phù
hợp (xem Liệt kê 4).

Liệt kê 4. Xác thực tuỳ chỉnh
package com.dw.roo.conference.security;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityNotFoundException;
import javax.persistence.NonUniqueResultException;

import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.security.authentication.BadCredentialsException;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationTok
en;
import org.springframework.security.authentication.\
dao.AbstractUserDetailsAuthenticationProvider;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.util.StringUtils;

import com.dw.roo.conference.domain.Speaker;

throw new BadCredentialsException("Invalid username or
password");
} catch (EntityNotFoundException e) {
throw new BadCredentialsException("Invalid user");
} catch (NonUniqueResultException e) {
throw new BadCredentialsException("Non-unique user, contact
administrator");
}
return new User(username, password, true, // enabled
true, // account not expired
true, // credentials not expired
true, // account not locked
authorities);
}
}

Trong tệp applicationContext-security.xml, chúng ta phải định nghĩa bean
conferenceAuthenticationProvider (trình cung cấp xác thực hội nghị) và thay thế trình cung
cấp xác thực trong bộ nhớ do Roo tạo ra bằng conferenceAuthenticationProvider của chúng
ta như trong Liệt kê 5.

Liệt kê 5. conferenceAuthenticationProvider
<beans:bean name="conferenceAuthenticationProvider"
class="com.dw.roo.conference.security.ConferenceAuthenticationProvider">
</beans:bean>

<! Configure Authentication mechanism >
<authentication-manager alias="authenticationManager">
<authentication-provider ref="conferenceAuthenticationProvider"/>
</authentication-manager>

Liệt kê 6. Tạo ra một phương thức encodeUrlPathSegment từ tệp .aj cho lớp
TalkController
public class TalkController {

@Autowired
private transient MailSender mailTemplate;

public void sendMessage(String mailFrom, String subject, String
mailTo,
String message) {
org.springframework.mail.SimpleMailMessage \
simpleMailMessage = new org.springframework.mail.SimpleMailMessage();
simpleMailMessage.setFrom(mailFrom);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setTo(mailTo);
simpleMailMessage.setText(message);
mailTemplate.send(simpleMailMessage);
}

@RequestMapping(method = RequestMethod.POST)
public String create(@Valid Talk talk, BindingResult result, Model
model,
HttpServletRequest request) {
if (result.hasErrors()) {
model.addAttribute("talk", talk);
return "talks/create";
}
talk.persist();
sendMessage("[email protected]", "Your talk is
created",

language, cài đặt một ngôn ngữ mới trong ứng dụng của bạn. Ví dụ, các lệnh cho ngôn ngữ Tây
Ban Nha và Ý là:
web mvc install language code es
web mvc install language code it

Roo hiện hỗ trợ sáu ngôn ngữ và bạn có thể viết một ngôn ngữ bổ sung cho những ngôn ngữ
khác theo sự lựa chọn của bạn. Bây giờ khi chạy ứng dụng này, 2 lá cờ (của Italy và Tây Ban
Nha) được hiển thị, cùng với lá cờ Anh. Nếu bạn nhấn chuột vào bất kỳ lá cờ nào trong các lá cờ
đó, bạn sẽ xem ứng dụng web theo ngôn ngữ tương ứng với lá cờ đó.
Về đầu trang
Xã hội hóa ứng dụng web của bạn
Đây là một kỷ nguyên phương tiện truyền thông xã hội và các tính năng xã hội thường được
thêm vào các ứng dụng hiện tại. Để thêm đoạn video của các Talk thường rất có ý nghĩa. Roo
cung cấp sự hỗ trợ để nhúng đoạn video được tải lên YouTube, Vimeo, Viddler và Google
Video, v.v Để nhúng một đoạn video, hãy sử dụng lệnh sau:
web mvc embed video provider VIMEO videoId 16069687

Nếu bạn khởi động máy chủ và khởi chạy ứng dụng của mình trong một trình duyệt, bạn sẽ có
thể xem đoạn video đã nhúng nói trên. Tương tự như vậy, bạn có thể thêm vào các đoạn video
YouTube hoặc Viddler.
Roo cũng cung cấp cho bạn một tùy chọn để nhúng các thông báo Twitter, các tài liệu, các ticker,
các bản đồ, các bức ảnh và các luồng video trong ứng dụng của bạn. Các lệnh khác nhau trong
Liệt kê 7.

Liệt kê 7. Các lệnh nhúng
web mvc embed document
web mvc embed finances
web mvc embed map
web mvc embed photos
web mvc embed stream video

2. Từ dòng lệnh hệ điều hành của bạn, hãy vào thư mục feedback.
3. Mở trình vỏ Roo bằng cách gõ lệnh roo.
4. Gõ project topLevelPackage com.dw.roo.feedback để tạo ra một dự án Maven
mới.
5. Trong ứng dụng này, chúng ta sẽ sử dụng MySQL làm cơ sở dữ liệu của mình. Để thiết
lập sự tồn tại lâu bền cho ứng dụng của bạn, hãy sử dụng:
persistence setup provider HIBERNATE
database MYSQL databaseName feedback_schema
userName root password password
6.
7. Khi tôi đã tạo ra lược đồ với người dùng chủ, tôi sẽ sử dụng root làm tên người dùng của
mình. Xin hãy nhập tên người dùng và mật khẩu mà bạn đã dùng chúng để tạo ra lược đồ
của mình. Lệnh này cũng sẽ thêm tất cả các JAR cần thiết cho sự tồn tại lâu bền.
8. Bạn có thể tự xem xét lược đồ cơ sở dữ liệu bằng lệnh database introspect schema
feedback_schema. Lệnh database introspect (tự xem xét cơ sở dữ liệu) cho thấy siêu
dữ liệu liên quan đến lược đồ cơ sở dữ liệu. Lệnh này sẽ cho bạn thấy siêu dữ liệu cho
lược đồ của bạn trên giao diện điều khiển trình vỏ Roo. Bạn cũng có thể xuất khẩu xml
siêu dữ liệu vào một tệp khi sử dụng lệnh file attribute.
9. Khi bạn đã hoàn thành việc tự xem xét cho lược đồ cơ sở dữ liệu của mình, bạn có thể sử
dụng kỹ thuật-đảo ngược lược đồ đó bằng cách sử dụng lệnh database reverse
engineer schema feedback_schema package ~.domain.
Lệnh database reverse engineer (kỹ thuật đảo ngược cơ sở dữ liệu) có hai thuộc tính
bắt buộc là schema (lược đồ) và package (gói), để chỉ rõ tên của lược đồ bạn muốn dùng
kỹ thuật đảo ngược và gói trong đó Roo sẽ tạo ra các mã nguồn. Lệnh này sẽ tạo ra tất cả
các thực thể trong gói com.dw.roo.feedback.domain.
10. Bước tiếp theo sẽ tạo các bộ điều khiển cho ứng dụng của bạn. Bạn có thể làm bước này
bằng cách thực hiện lệnh controller all package ~.web.
11. Trước khi chạy ứng dụng của mình, chúng ta cần thực hiện một thay đổi nhỏ cho một đặc
tính trong persistence.xml. Đặc tính hibernate.ejb.naming_strategy đang sử dụng
ImprovedNamingStrategy, không làm việc với cơ sở dữ liệu MySQL và bạn sẽ nhận


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status