用户中心后端-5
# 07.用户中心后端-5
用户中心系统的管理功能
需求设计
- 1.查询用户(根据用户名查询)
- 2.删除用户
# 后端开发
1.UserController
里编写查询用户请求
@GetMapping("/search")
public List<User> searchUsers(String username) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StringUtils.isAnyBlank(username)) {
queryWrapper.like("username", username);
}
return userService.list(queryWrapper);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
2.UserController
里编写删除用户请求
@PostMapping("delete")
public boolean deleteUser(@RequestBody long id) {
if (id <= 0) {
return false;
}
return userService.removeById(id);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
3.我们还需要一个管理人员的检验,使得接口需要获得权限后方可调用
在UserServiceImpl
中的用户脱敏加入一行
safetyUser.setUserRole(user.getUserRole());
1
我们需要实现调用的方法,在UserService文件里加入Impl写过的用户登录态键
在UserController
里写判断角色权限的方法
/**
*
* 是否为管理员
*/
private boolean isAdmin(HttpServletRequest request) {
//仅管理员可查询
Object userObj = request.getSession().getAttribute(UserService.USER_LOGIN_STATE);
User user = (User) userObj;
return user != null && user.getUserRole() == 1;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在delete和search接口中调用isAdmin
@GetMapping("/search")
public List<User> searchUsers(String username,HttpServletRequest request) {
if (!isAdmin(request)) {
return null;
}
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StringUtils.isAnyBlank(username)) {
queryWrapper.like("username", username);
}
return userService.list(queryWrapper);
}
@PostMapping("/delete")
public boolean deleteUser(@RequestBody long id, HttpServletRequest request) {
if(!isAdmin(request)) {
return false;
}
if (id <= 0) {
return false;
}
return userService.removeById(id);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
4.在application.yml配置文件里增加session的失效时间

5.测试
在UserController
中创建一个新的HTTP Client执行GET请求
发现什么也没有返回
设计方法进行测试
提示没有管理员权限,于是先进行登录管理员账户,以管理员账户的权限去发送search请求
### 登录请求
POST http://localhost:8080/api/user/login
Content-Type: application/json
{
"userAccount": "yupi",
"userPassword": "12345678"
}
### 提取会话 ID 或 JWT
@sessionId = {{response-headers.JSESSIONID}}
@jwtToken = {{response-body.token}}
### 全部搜索(带会话 ID)
GET http://localhost:8080/api/user/search
Cookie: JSESSIONID={{sessionId}}
### 精确搜索(带会话 ID)
GET http://localhost:8080/api/user/search?username=yupi
Cookie: JSESSIONID={{sessionId}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
但返回的还是空白,咋回事?
原来是代码逻辑问题= = (本教程是根据做过的人写的教程复刻的,对方运行成功了,而我发现已有两处是写了相反逻辑的步骤) 无妨,这锻炼了自己debug的能力
最后执行结果

完整代码
@GetMapping("/search")
public List<User> searchUsers(String username,HttpServletRequest request) {
if (!isAdmin(request)) {
System.out.println("非管理员权限");
return null;
}
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(username)) {
queryWrapper.like("username", username);
}
System.out.println("查询成功");
return userService.list(queryWrapper);
}
@PostMapping("/delete")
public boolean deleteUser(@RequestBody long id, HttpServletRequest request) {
if(!isAdmin(request)) {
System.out.println("非管理员权限");
return false;
}
if (id <= 0) {
System.out.println("数据库中无人员");
return false;
}
System.out.println("返回成功");
return userService.removeById(id);
}
/**
*
* 是否为管理员
*/
private boolean isAdmin(HttpServletRequest request) {
//仅管理员可查询
Object userObj = request.getSession().getAttribute(UserConstant.USER_LOGIN_STATE);
User user = (User) userObj;
return user != null && user.getUserRole() == UserConstant.ADMIN_ROLE;
}
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
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
我把USER_LOGIN_STATE和ADMIN_ROLE放到了新的包constant的UserConstant接口类里,方便调用
package com.msingbai.usercenter.constant;
public interface UserConstant {
/**
* 用户态登录键
*/
String USER_LOGIN_STATE = "userLoginState";
Integer ADMIN_ROLE = 1;
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 用户脱敏
在UserServicImpl
中新建一个getSafetyUser
方法,将原来用户脱敏的代码复制进去。将原来用户脱敏的位置改成调用该方法。在方法前加上@Override
标签,在UserService
引入该方法

文字写于:广东
更新时间: 2025/4/7 18:05:32