CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này sử dụng các ví dụ về các bộ chặn SpringMVC được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Giới thiệu
Bộ chặn bộ xử lý của SpringMVC tương tự như bộ lọc trong quá trình phát triển Servlet, được sử dụng để xử lý trước và xử lý hậu kỳ bộ xử lý. Các nhà phát triển có thể tự xác định một số thiết bị chặn để thực hiện các chức năng cụ thể.
lọc.
- Một phần của đặc tả servlet, bất kỳ dự án web Java nào cũng có thể sử dụng nó
- Sau khi định cấu hình /* trong mẫu url, tất cả tài nguyên được truy cập có thể bị chặn.
Máy đánh chặn.
- Bộ chặn này là của riêng khung công tác SpringMVC và chỉ có thể được sử dụng bởi các dự án sử dụng khung công tác SpringMVC.
- Bộ chặn sẽ chỉ chặn phương thức điều khiển được truy cập. Nếu quyền truy cập là jsp/html/css/image/js thì nó sẽ không bị chặn.
Sự khác biệt giữa bộ lọc và thiết bị chặn:
Thiết bị chặn là một ứng dụng cụ thể của ý tưởng AOP.
Trải nghiệm đầu tiên với máy đánh chặn
1. Tạo một dự án mới, thêm hỗ trợ web và nhập gói lib mà dự án phụ thuộc vào IDEA.
2. Định cấu hình web.xml.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
xml
phiên bản
=
"1.0"
mã hóa
=
"UTF-8"
?>
<
ứng dụng web
xmln
=
"http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaVị trí
=
"http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
phiên bản
=
"4.0"
>
<
dịch vụ
>
<
tên servlet
>springmvc
tên servlet
>
<
lớp servlet
>org.springframework.web.servlet.DispatcherServlet
lớp servlet
>
<
thông số nhiệt
>
<
tên tham số
>contextConfigVị trí
tên tham số
>
<
giá trị tham số
>đường dẫn lớp:springmvc-servlet.xml
giá trị tham số
>
thông số nhiệt
>
<
tải khi khởi động
>1
tải khi khởi động
>
dịch vụ
>
<
ánh xạ servlet
>
<
tên servlet
>springmvc
tên servlet
>
<
mẫu url
>/
mẫu url
>
ánh xạ servlet
>
<
lọc
>
<
tên bộ lọc
>mã hóa
tên bộ lọc
>
<
lớp lọc
>org.springframework.web.filter.CharacterEncodingFilter
lớp lọc
>
<
thông số nhiệt
>
<
tên tham số
>mã hóa
tên tham số
>
<
giá trị tham số
>UTF-8
giá trị tham số
>
thông số nhiệt
>
lọc
>
<
ánh xạ bộ lọc
>
<
tên bộ lọc
>mã hóa
tên bộ lọc
>
<
mẫu url
>/*
mẫu url
>
ánh xạ bộ lọc
>
ứng dụng web
>
|
3. Định cấu hình springmvc-servlet.xml.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
xml
phiên bản
=
"1.0"
mã hóa
=
"UTF-8"
?>
<
đậu
xmln
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:bối cảnh
=
"http://www.springframework.org/schema/context"
xmlns:mvc
=
"http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<
ngữ cảnh: quét thành phần
gói cơ sở
=
"bộ điều khiển"
/>
<
mvc:chú thích-điều khiển
/>
<
mvc:chú thích-điều khiển
>
<
mvc:bộ chuyển đổi tin nhắn
đăng ký mặc định
=
"ĐÚNG VẬY"
>
<
đậu
lớp học
=
"org.springframework.http.converter.StringHttpMessageConverter"
>
<
constructor-arg
giá trị
=
"UTF-8"
/>
đậu
>
<
đậu
lớp học
=
"org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"
>
<
tài sản
tên
=
"objectMapper"
>
<
đậu
lớp học
=
"org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
>
<
tài sản
tên
=
"failOnEmptyBeans"
giá trị
=
"SAI"
/>
đậu
>
tài sản
>
đậu
>
mvc:bộ chuyển đổi tin nhắn
>
mvc:chú thích-điều khiển
>
<
đậu
lớp học
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
nhận dạng
=
"InternalResourceViewResolver"
>
<
tài sản
tên
=
"tiền tố"
giá trị
=
"/WEB-INF/jsp/"
/>
<
tài sản
tên
=
"hậu tố"
giá trị
=
".jsp"
/>
đậu
>
đậu
>
|
4. Viết một trình chặn tùy chỉnh. (Triển khai giao diện HandlerInterceptor).
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
bưu kiện
máy đánh chặn;
nhập khẩu
org.springframework.web.servlet.HandlerInterceptor;
nhập khẩu
org.springframework.web.servlet.ModelAndView;
nhập khẩu
javax.servlet.http.HttpServletRequest;
nhập khẩu
javax.servlet.http.HttpServletResponse;
công cộng
lớp học
Máy đánh chặn của tôi
thực hiện
HandlerInterceptor {
công cộng
Boolean
preHandle(yêu cầu HttpServletRequest, phản hồi HttpServletResponse, trình xử lý đối tượng)
ném
Ngoại lệ {
Hệ thống.out.println(
"----------Trước khi xử lý-------------"
);
trở lại
ĐÚNG VẬY
;
}
công cộng
vô hiệu
postHandle(yêu cầu HttpServletRequest, phản hồi HttpServletResponse, trình xử lý đối tượng, ModelAndView modelAndView)
ném
Ngoại lệ {
Hệ thống.out.println(
"----------sau khi xử lý-------------"
);
}
công cộng
vô hiệu
afterCompletion(yêu cầu HttpServletRequest, phản hồi HttpServletResponse, trình xử lý đối tượng, ngoại lệ ví dụ)
ném
Ngoại lệ {
Hệ thống.out.println(
"------------Lau dọn----------"
);
}
}
|
Thực tế, chỉ cần ghi đè phương thức preHandle.
5. Định cấu hình bộ chặn trong tệp springmvc-servlet.xml.
?
1
2
3
4
5
6
7
8
9
10
11
|
<
mvc:máy chặn
>
<
mvc:chặn
>
<
mvc: lập bản đồ
con đường
=
"/**"
/>
<
đậu
lớp học
=
"interceptor.MyInterceptor"
/>
mvc:chặn
>
mvc:máy chặn
>
|
6. Viết bộ điều khiển.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
bưu kiện
bộ điều khiển;
nhập khẩu
org.springframework.web.bind.annotation.RequestMapping;
nhập khẩu
org.springframework.web.bind.annotation.RestController;
@Bộ điều khiển nghỉ ngơi
công cộng
lớp học
Bộ điều khiển Interceptor {
@Yêu cầu lập bản đồ
(
"/máy chặn"
)
công cộng
Kiểm tra chuỗi(){
Hệ thống.out.println(
"Bộ điều khiển chặn"
);
trở lại
"Được rồi"
;
}
}
|
7. Cấu hình Tomcat và kiểm tra.
Trải nghiệm đầu tiên: Trình chặn tùy chỉnh triển khai giao diện HandlerInterceptor và ghi đè phương thức preHandle. Trong phương thức preHandle, giá trị trả về xác định có chặn hay không. Khi giá trị trả về là đúng, nó sẽ không chặn, nếu không thì nó sẽ chặn;
8. Kết quả:
- Giá trị trả về là true, bộ chặn không chặn và nhảy
- Giá trị trả về là sai, thiết bị chặn sẽ chặn và không nhảy.
Trải nghiệm lại thiết bị chặn - xác minh đăng nhập
Thực hiện ý tưởng.
- Có một trang đăng nhập và bạn cần viết một bộ điều khiển để truy cập trang.
- Trang đăng nhập có một hành động để gửi biểu mẫu. Cần phải được xử lý trong bộ điều khiển. Xác định xem tên người dùng và mật khẩu có chính xác hay không. Nếu đúng, hãy ghi thông tin người dùng vào phiên. Trở lại đăng nhập thành công.
- Chặn yêu cầu của người dùng và xác định xem người dùng đã đăng nhập hay chưa. Nếu người dùng đã đăng nhập. Thả ra, nếu người dùng chưa đăng nhập, hãy chuyển đến trang đăng nhập
Giao diện đăng nhập.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<%@ nội dung trangType=
"text/html;charset=UTF-8"
ngôn ngữ=
"java"
%>
<đầu>đầu>
Tiêu đề
Trang đăng nhập
|
"${pageContext.request.contextPath}/người dùng/đăng nhập"
>
Tên người dùng:
"chữ"
tên=
"tên người dùng"
>
Mật khẩu:
"mật khẩu"
tên=
"mã số"
>
"nộp"
giá trị=
"nộp"
>
|
Bộ điều khiển xử lý yêu cầu.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
bưu kiện
bộ điều khiển;
nhập khẩu
org.springframework.stereotype.Controller;
nhập khẩu
org.springframework.web.bind.annotation.RequestMapping;
nhập khẩu
javax.servlet.http.HttpSession;
@Bộ điều khiển
@Yêu cầu lập bản đồ
(
"/người dùng"
)
công cộng
lớp học
Bộ điều khiển người dùng {
@Yêu cầu lập bản đồ
(
"/jumplogin"
)
công cộng
Chuỗi jumpLogin()
ném
Ngoại lệ {
trở lại
"đăng nhập"
;
}
@Yêu cầu lập bản đồ
(
"/nhảyThành công"
)
công cộng
Chuỗi jumpSuccess()
ném
Ngoại lệ {
trở lại
"thành công"
;
}
@Yêu cầu lập bản đồ
(
"/đăng nhập"
)
công cộng
Chuỗi đăng nhập (phiên HttpSession, Chuỗi tên người dùng, Chuỗi pwd)
ném
Ngoại lệ {
Hệ thống.out.println(
"Nhận giao diện người dùng==="
+tên người dùng);
phiên.setAttribute(
"người dùng"
, tên người dùng);
trở lại
"thành công"
;
}
@Yêu cầu lập bản đồ
(
"đăng xuất"
)
công cộng
Chuỗi đăng xuất (phiên HttpSession)
ném
Ngoại lệ {
session.invalidate();
trở lại
"đăng nhập"
;
}
}
|
Trang đăng nhập thành công.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<%@ nội dung trangType=
"text/html;charset=UTF-8"
ngôn ngữ=
"java"
%>
<đầu>đầu>
Tiêu đề
|
Trang đăng nhập thành công
${người dùng}
"${pageContext.request.contextPath}/người dùng/đăng xuất"
>Đăng xuất
|
trang chỉ mục.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ nội dung trangType=
"text/html;charset=UTF-8"
ngôn ngữ=
"java"
%>
<đầu>đầu>
$Tiêu đề$
|
Trang chủ
<%--Đăng nhập--%>
"${pageContext.request.contextPath}/người dùng/jumplogin"
>Đăng nhập
"${pageContext.request.contextPath}/người dùng/jumpSuccess"
>Trang thành công
|
trang chỉ mục.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ nội dung trangType="text/html;charset=UTF-8" ngôn ngữ="java" %>
<
html
>
<
cái đầu
>
<
tiêu đề
>$Tiêu đề$
tiêu đề
>
cái đầu
>
<
thân hình
>
<
h1
>Trang chủ
h1
>
<
giờ
>
<%--Đăng nhập--%>
<
Một
href
=
"${pageContext.request.contextPath}/người dùng/jumplogin"
>Đăng nhập
Một
>
<
Một
href
=
"${pageContext.request.contextPath}/người dùng/jumpSuccess"
>Trang thành công
Một
>
thân hình
>
html
>
|
Viết một bộ điều khiển.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
bưu kiện
máy đánh chặn;
nhập khẩu
org.springframework.web.servlet.HandlerInterceptor;
nhập khẩu
javax.servlet.http.HttpServletRequest;
nhập khẩu
javax.servlet.http.HttpServletResponse;
nhập khẩu
javax.servlet.http.HttpSession;
công cộng
lớp học
Đăng nhậpInterceptor
thực hiện
HandlerInterceptor {
công cộng
Boolean
preHandle(yêu cầu HttpServletRequest, phản hồi HttpServletResponse, trình xử lý đối tượng)
ném
Ngoại lệ {
nếu như
(yêu cầu.getRequestURI().chứa(
"đăng nhập"
)) {
trở lại
ĐÚNG VẬY
;
}
Phiên HttpSession = request.getSession();
nếu như
(phiên.getAttribute(
"người dùng"
) !=
vô giá trị
) {
trở lại
ĐÚNG VẬY
;
}
yêu cầu.getRequestDispatcher(
"/WEB-INF/jsp/login.jsp"
).forward(yêu cầu, phản hồi);
trở lại
SAI
;
}
}
|
Định cấu hình bộ chặn trong springmvc-servlet.xml.
?
1
2
3
4
|
<
mvc:chặn
>
<
mvc: lập bản đồ
con đường
=
"/**"
/>
<
đậu
nhận dạng
=
"đăng nhậpInterceptor"
lớp học
=
"interceptor.LoginInterceptor"
/>
mvc:chặn
>
|
Cấu hình Tomcat và kiểm tra.
Kết quả: Bạn không thể truy cập trực tiếp vào trang đăng nhập thành công nếu không đăng nhập.
Trên đây là chi tiết về giải pháp cắt xén tiếng Trung của SpringMVC. Để biết thêm thông tin về mã cắt xén tiếng Trung của SpringMVC, vui lòng theo dõi các bài viết liên quan khác của tôi! .
Liên kết gốc: https://juejin.cn/post/6944667529717481485.
Cuối cùng, bài viết này về các ví dụ sử dụng của bộ chặn SpringMVC kết thúc tại đây. Nếu bạn muốn biết thêm về các ví dụ sử dụng của bộ chặn SpringMVC, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. Tôi hy vọng bạn sẽ hỗ trợ tôi trong tương lai. blog! .
Tôi là một lập trình viên xuất sắc, rất giỏi!