Skip to content

Commit 1921842

Browse files
committed
Update >> Add interceptor(拦截器)
1 parent e9f3f32 commit 1921842

File tree

8 files changed

+146
-64
lines changed

8 files changed

+146
-64
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
> 8. 完善首页问题列表展示
4848
> 9. 使用 `developer tools` 添加配置 `spring.devtools.restart.exclude=static/**,public/**` 完成自动部署(热更新)
4949
> 10. 添加分页功能
50+
> 11. 添加拦截器 `WebConfig`
5051
>
5152
5253
```markdown

src/main/java/life/majiang/community/controller/IndexController.java

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,20 @@
66
*/
77

88
import life.majiang.community.dto.PaginationDTO;
9-
import life.majiang.community.mapper.UserMapper;
10-
import life.majiang.community.model.User;
119
import life.majiang.community.service.QuestionService;
1210
import org.springframework.beans.factory.annotation.Autowired;
1311
import org.springframework.stereotype.Controller;
1412
import org.springframework.ui.Model;
1513
import org.springframework.web.bind.annotation.GetMapping;
1614
import org.springframework.web.bind.annotation.RequestParam;
1715

18-
import javax.servlet.http.Cookie;
1916
import javax.servlet.http.HttpServletRequest;
2017

2118
@Controller
2219
public class IndexController {
2320

24-
@Autowired // 注入 UserMapper
25-
private UserMapper userMapper;
21+
// @Autowired // 注入 UserMapper
22+
// private UserMapper userMapper;
2623

2724
@Autowired // 注入 QuestionService
2825
private QuestionService questionService;
@@ -40,21 +37,22 @@ public String index(HttpServletRequest request,
4037
@RequestParam(name = "page", defaultValue = "1") Integer page, // 默认第1页
4138
@RequestParam(name = "size", defaultValue = "5") Integer size // 默认5页 每页条数
4239
) {
43-
Cookie[] cookies = request.getCookies(); // 获取用户 cookie
44-
if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0
45-
for (Cookie cookie : cookies) {
46-
if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
47-
String token = cookie.getValue();
48-
User user = userMapper.findByToken(token);
49-
// 如果user != null 写入session
50-
if (user != null) {
51-
System.out.println(user.toString());
52-
request.getSession().setAttribute("user", user);
53-
}
54-
break; // 命中后结束循环
55-
}
56-
}
57-
}
40+
// 用户 cookies 由拦截器SessionInterceptor执行
41+
// Cookie[] cookies = request.getCookies(); // 获取用户 cookie
42+
// if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0
43+
// for (Cookie cookie : cookies) {
44+
// if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
45+
// String token = cookie.getValue();
46+
// User user = userMapper.findByToken(token);
47+
// // 如果user != null 写入session
48+
// if (user != null) {
49+
// System.out.println(user.toString());
50+
// request.getSession().setAttribute("user", user);
51+
// }
52+
// break; // 命中后结束循环
53+
// }
54+
// }
55+
// }
5856
// 获取 question_list
5957
// List<Question> questionList = questionMapper.list(); // question表不能返回用户头像
6058
PaginationDTO pagination = questionService.list(page, size);

src/main/java/life/majiang/community/controller/ProfileController.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package life.majiang.community.controller;
22

33
import life.majiang.community.dto.PaginationDTO;
4-
import life.majiang.community.mapper.UserMapper;
54
import life.majiang.community.model.User;
65
import life.majiang.community.service.QuestionService;
76
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,14 +10,13 @@
1110
import org.springframework.web.bind.annotation.PathVariable;
1211
import org.springframework.web.bind.annotation.RequestParam;
1312

14-
import javax.servlet.http.Cookie;
1513
import javax.servlet.http.HttpServletRequest;
1614

1715
@Controller
1816
public class ProfileController {
1917

20-
@Autowired // 注入 UserMapper
21-
private UserMapper userMapper;
18+
// @Autowired // 注入 UserMapper
19+
// private UserMapper userMapper;
2220

2321
@Autowired // 注入 QuestionService
2422
private QuestionService questionService;
@@ -29,23 +27,24 @@ public String profile(HttpServletRequest request,
2927
@RequestParam(name = "page", defaultValue = "1") Integer page, // 默认第1页
3028
@RequestParam(name = "size", defaultValue = "5") Integer size, // 默认5页 每页条数
3129
Model model) {
32-
User user = null;
33-
Cookie[] cookies = request.getCookies(); // 获取用户 cookie
34-
if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0
35-
for (Cookie cookie : cookies) {
36-
if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
37-
String token = cookie.getValue();
38-
user = userMapper.findByToken(token);
39-
// 如果user != null 写入session
40-
if (user != null) {
41-
System.out.println(user.toString());
42-
request.getSession().setAttribute("user", user);
43-
}
44-
break; // 命中后结束循环
45-
}
46-
}
47-
}
48-
30+
// User user = null;
31+
// Cookie[] cookies = request.getCookies(); // 获取用户 cookie
32+
// if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0
33+
// for (Cookie cookie : cookies) {
34+
// if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
35+
// String token = cookie.getValue();
36+
// user = userMapper.findByToken(token);
37+
// // 如果user != null 写入session
38+
// if (user != null) {
39+
// System.out.println(user.toString());
40+
// request.getSession().setAttribute("user", user);
41+
// }
42+
// break; // 命中后结束循环
43+
// }
44+
// }
45+
// }
46+
// 获取User
47+
User user = (User) request.getSession().getAttribute("user");
4948
if (user == null) { // 如果未登录跳转到 首页
5049
return "redirect:/"; // 返回 首页;
5150
}

src/main/java/life/majiang/community/controller/PublishController.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package life.majiang.community.controller;
22

33
import life.majiang.community.mapper.QuestionMapper;
4-
import life.majiang.community.mapper.UserMapper;
54
import life.majiang.community.model.Question;
65
import life.majiang.community.model.User;
76
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +10,6 @@
1110
import org.springframework.web.bind.annotation.PostMapping;
1211
import org.springframework.web.bind.annotation.RequestParam;
1312

14-
import javax.servlet.http.Cookie;
1513
import javax.servlet.http.HttpServletRequest;
1614

1715
@Controller
@@ -20,8 +18,8 @@ public class PublishController {
2018
@Autowired // 注入 questionMapper
2119
private QuestionMapper questionMapper;
2220

23-
@Autowired // 注入 userMapper
24-
private UserMapper userMapper;
21+
// @Autowired // 注入 userMapper
22+
// private UserMapper userMapper;
2523

2624
// get 去渲染页面
2725
@GetMapping("/publish")
@@ -43,21 +41,24 @@ public String doQuestion(
4341
/**
4442
* publish_page 获取填写者信息 判断是否登录
4543
* */
46-
User user = null;
47-
Cookie[] cookies = request.getCookies();
48-
if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0 去除空指针
49-
for (Cookie cookie : cookies) {
50-
if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
51-
String token = cookie.getValue();
52-
user = userMapper.findByToken(token);
53-
// 如果user != null 写入session
54-
if (user != null) {
55-
request.getSession().setAttribute("user", user);
56-
}
57-
break; // 命中后结束循环
58-
}
59-
}
60-
}
44+
// User user = null;
45+
// Cookie[] cookies = request.getCookies();
46+
// if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0 去除空指针
47+
// for (Cookie cookie : cookies) {
48+
// if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
49+
// String token = cookie.getValue();
50+
// user = userMapper.findByToken(token);
51+
// // 如果user != null 写入session
52+
// if (user != null) {
53+
// request.getSession().setAttribute("user", user);
54+
// }
55+
// break; // 命中后结束循环
56+
// }
57+
// }
58+
// }
59+
60+
// 获取User
61+
User user = (User) request.getSession().getAttribute("user");
6162

6263
/**
6364
* publish_page 问题提交校验逻辑 判断填写内容
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package life.majiang.community.interceptor;
2+
3+
import life.majiang.community.mapper.UserMapper;
4+
import life.majiang.community.model.User;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.stereotype.Service;
7+
import org.springframework.web.servlet.HandlerInterceptor;
8+
import org.springframework.web.servlet.ModelAndView;
9+
10+
import javax.servlet.http.Cookie;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
13+
14+
@Service
15+
//@Component
16+
public class SessionInterceptor implements HandlerInterceptor {
17+
18+
@Autowired
19+
private UserMapper userMapper;
20+
21+
22+
@Override // 请求前执行
23+
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
24+
Cookie[] cookies = request.getCookies(); // 获取用户 cookie
25+
if (cookies != null && cookies.length != 0) {// 判断是用户 Cookie 是否为空 长度不为0
26+
for (Cookie cookie : cookies) {
27+
if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
28+
String token = cookie.getValue();
29+
User user = userMapper.findByToken(token);
30+
// 如果user != null 写入session
31+
if (user != null) {
32+
System.out.println(user.toString());
33+
request.getSession().setAttribute("user", user);
34+
}
35+
break; // 命中后结束循环
36+
}
37+
}
38+
}
39+
return true; // 返回 true 继续执行
40+
}
41+
42+
@Override
43+
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
44+
45+
}
46+
47+
@Override
48+
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
49+
50+
}
51+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package life.majiang.community.interceptor;
2+
3+
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
7+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
8+
9+
@Configuration
10+
//@EnableWebMvc // 全面接管
11+
public class WebConfig implements WebMvcConfigurer {
12+
13+
@Autowired
14+
private SessionInterceptor SessionInterceptor;
15+
16+
@Override
17+
public void addInterceptors(InterceptorRegistry registry) {
18+
registry.addInterceptor(SessionInterceptor).addPathPatterns("/**"); // 拦截所有目录
19+
}
20+
}
21+
22+
23+
24+
25+
26+
27+
28+
29+
30+
31+
32+

src/main/resources/templates/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ <h4 class="media-heading" th:text="${question.title}">标题</h4>
5050
<span aria-hidden="true">&lt;</span>
5151
</a>
5252
</li>
53-
<!--高亮当前页-->
53+
<!--页码 & 高亮当前页-->
5454
<li th:class="${pagination.page == page}? 'active' : ''" th:each="page : ${pagination.pages}">
5555
<a th:href="@{/(page=${page})}" th:text="${page}"></a>
5656
</li>

src/main/resources/templates/profile.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ <h4 class="media-heading" th:text="${question.title}"></h4>
5252
<span aria-hidden="true">&lt;</span>
5353
</a>
5454
</li>
55-
<!--高亮当前页-->
55+
<!--页码 & 高亮当前页-->
5656
<li th:class="${pagination.page == page}? 'active' : ''" th:each="page : ${pagination.pages}">
57-
<a th:href="@{'/profile/'+${section}(page=${pagination.page})}" th:text="${page}"></a>
57+
<a th:href="@{'/profile/'+${section}(page=${page})}" th:text="${page}"></a>
5858
</li>
5959

60-
<li th:if="${pagination.showNext}">
60+
<li th:if="${pagination.showNext}">s
6161
<a aria-label="Previous" th:href="@{'/profile/'+${section}(page=${pagination.page +1})}">
6262
<span aria-hidden="true">&gt;</span>
6363
</a>

0 commit comments

Comments
 (0)