You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test/src/main/java/com/controller/UsersController.java

234 lines
8.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.controller;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
/**
* 登录相关
*/
// 定义请求映射路径,所有以/users开头的请求会被该控制器处理
@RequestMapping("users")
// 声明该类为一个RESTful风格的控制器用于处理HTTP请求并返回JSON数据
@RestController
public class UsersController {
// 自动注入UsersService用于处理与用户相关的业务逻辑
@Autowired
private UsersService usersService;
// 自动注入TokenService用于处理与令牌相关的业务逻辑
@Autowired
private TokenService tokenService;
/**
* 处理用户登录请求
* @param username 用户名
* @param password 密码
* @param captcha 验证码(当前代码未实际使用该参数)
* @param request HTTP请求对象
* @return R类型的响应对象包含登录结果信息
*/
@IgnoreAuth // 忽略权限验证的注解
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
// 根据用户名查询用户实体
UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
// 如果用户不存在或者用户输入的密码与数据库中存储的密码不匹配
if (user == null || !user.getPassword().equals(password)) {
// 返回错误响应,提示账号或密码不正确
return R.error("账号或密码不正确");
}
// 生成用户令牌参数依次为用户ID、用户名、用户类型标识、用户角色
String token = tokenService.generateToken(user.getId(), username, "users", user.getRole());
// 创建一个成功的响应对象
R r = R.ok();
// 将生成的令牌放入响应数据中
r.put("token", token);
// 将用户的角色信息放入响应数据中
r.put("role", user.getRole());
// 将用户的ID信息放入响应数据中
r.put("userId", user.getId());
// 返回响应对象
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UsersEntity user) {
// ValidatorUtils.validateEntity(user); // 被注释掉的代码,可能用于验证用户实体的合法性,目前未启用
// 根据用户名查询数据库,判断用户是否已经存在
if (usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) != null) {
// 如果用户已存在,返回错误响应
return R.error("用户已存在");
}
// 将新用户插入到数据库中
usersService.insert(user);
// 返回成功响应
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
// 使当前用户的会话失效,实现退出登录
request.getSession().invalidate();
// 返回成功响应,并附带退出成功的提示信息
return R.ok("退出成功");
}
/**
* 处理用户密码重置请求
* @param username 用户名
* @param request HTTP请求对象
* @return R类型的响应对象包含密码重置结果信息
*/
@IgnoreAuth // 忽略权限验证的注解
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request) {
// 根据用户名查询用户实体
UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
// 如果用户不存在
if (user == null) {
// 返回错误响应,提示账号不存在
return R.error("账号不存在");
}
// 将用户密码重置为默认值123456
user.setPassword("123456");
// 更新用户信息到数据库第二个参数为null可能表示更新时不设置额外的条件
usersService.update(user, null);
// 返回成功响应,并附带密码已重置的提示信息
return R.ok("密码已重置为123456");
}
/**
* 处理获取用户列表的分页请求
* @param params 包含分页和查询条件的参数Map
* @param user 用户实体对象,可能用于构建查询条件
* @return R类型的响应对象包含分页后的用户列表数据
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, UsersEntity user) {
// 创建一个EntityWrapper对象用于构建查询条件
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
// 调用usersService的queryPage方法进行分页查询MPUtil.sort等方法用于处理查询条件和排序
PageUtils page = usersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
// 返回成功响应,并将分页结果数据放入响应中
return R.ok().put("data", page);
}
/**
* 处理获取用户列表的请求
* @param user 用户实体对象,用于构建查询条件
* @return R类型的响应对象包含用户列表数据
*/
@RequestMapping("/list")
public R list(UsersEntity user) {
// 创建一个EntityWrapper对象
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
// 根据用户实体对象构建查询条件使用MPUtil.allEQMapPre方法设置相等条件
ew.allEq(MPUtil.allEQMapPre(user, "user"));
// 调用usersService的selectListView方法查询用户列表并将结果放入响应中返回
return R.ok().put("data", usersService.selectListView(ew));
}
/**
* 处理获取指定用户信息的请求
* @param id 用户ID通过路径变量获取
* @return R类型的响应对象包含指定用户的信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id) {
// 根据用户ID查询用户实体
UsersEntity user = usersService.selectById(id);
// 返回成功响应,并将用户信息放入响应中
return R.ok().put("data", user);
}
/**
* 处理获取当前会话用户信息的请求
* @param request HTTP请求对象
* @return R类型的响应对象包含当前会话用户的信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request) {
// 从当前会话中获取用户ID
Integer id = (Integer) request.getSession().getAttribute("userId");
// 根据用户ID查询用户实体
UsersEntity user = usersService.selectById(id);
// 返回成功响应,并将用户信息放入响应中
return R.ok().put("data", user);
}
/**
* 处理保存新用户的请求
* @param user 用户实体对象,通过请求体获取
* @return R类型的响应对象包含保存结果信息
*/
@PostMapping("/save")
public R save(@RequestBody UsersEntity user) {
// ValidatorUtils.validateEntity(user); // 被注释掉的代码,可能用于验证用户实体的合法性,目前未启用
// 根据用户名查询数据库,判断用户是否已经存在
if (usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) != null) {
// 如果用户已存在,返回错误响应
return R.error("用户已存在");
}
// 设置用户密码为默认值123456
user.setPassword("123456");
// 将用户插入到数据库中
usersService.insert(user);
// 返回成功响应
return R.ok();
}
/**
* 处理更新用户信息的请求
* @param user 用户实体对象,通过请求体获取
* @return R类型的响应对象包含更新结果信息
*/
@RequestMapping("/update")
public R update(@RequestBody UsersEntity user) {
// ValidatorUtils.validateEntity(user); // 被注释掉的代码,可能用于验证用户实体的合法性,目前未启用
// 根据用户ID更新用户信息到数据库
usersService.updateById(user); // 全部更新
// 返回成功响应
return R.ok();
}
/**
* 处理删除用户的请求
* @param ids 要删除的用户ID数组通过请求体获取
* @return R类型的响应对象包含删除结果信息
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids) {
// 根据用户ID数组批量删除用户
usersService.deleteBatchIds(Arrays.asList(ids));
// 返回成功响应
return R.ok();
}
}