修改登录逻辑,配合前后端联调
This commit is contained in:
@@ -3,8 +3,14 @@ package com.rj;
|
|||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
//http://localhost:8080/swagger-ui/index.html?urls.primaryName=public-api
|
|
||||||
//http://101.43.230.106:8180/aismartcard/aicardbackend
|
/**
|
||||||
|
*
|
||||||
|
* http://localhost:9060/doc.html#/home
|
||||||
|
* http://localhost:9060/swagger-ui/index.html?urls.primaryName=public-api
|
||||||
|
* http://101.43.230.106:8180/aismartcard/aicardbackend
|
||||||
|
*
|
||||||
|
*/
|
||||||
@MapperScan("com.rj.mapper")
|
@MapperScan("com.rj.mapper")
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class Langchain4jHeima20250803Application {
|
public class Langchain4jHeima20250803Application {
|
||||||
|
|||||||
@@ -305,3 +305,6 @@ public class MenuController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -275,3 +275,6 @@ public class RoleController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ package com.rj.controller.sys;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.rj.common.PasswordUtil;
|
||||||
import com.rj.entity.sys.User;
|
import com.rj.entity.sys.User;
|
||||||
|
import com.rj.pojo.sys.LoginRequest;
|
||||||
|
import com.rj.pojo.sys.LoginResponse;
|
||||||
import com.rj.service.sys.IUserService;
|
import com.rj.service.sys.IUserService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
@@ -11,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -31,6 +35,28 @@ public class UserController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IUserService userService;
|
private IUserService userService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户登录
|
||||||
|
*/
|
||||||
|
@PostMapping("/login")
|
||||||
|
@Operation(summary = "用户登录", description = "根据用户名和密码进行登录验证")
|
||||||
|
public ResponseEntity<Map<String, Object>> login(
|
||||||
|
@Parameter(description = "登录信息", required = true)
|
||||||
|
@Valid @RequestBody LoginRequest loginRequest) {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
try {
|
||||||
|
LoginResponse loginResponse = userService.login(loginRequest);
|
||||||
|
result.put("success", true);
|
||||||
|
result.put("message", "登录成功");
|
||||||
|
result.put("data", loginResponse);
|
||||||
|
return ResponseEntity.ok(result);
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.put("success", false);
|
||||||
|
result.put("message", "登录失败:" + e.getMessage());
|
||||||
|
return ResponseEntity.badRequest().body(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增用户
|
* 新增用户
|
||||||
*/
|
*/
|
||||||
@@ -41,6 +67,23 @@ public class UserController {
|
|||||||
@RequestBody User user) {
|
@RequestBody User user) {
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
|
// 检查用户名是否已存在
|
||||||
|
User existingUser = userService.getUserByUserName(user.getUserName());
|
||||||
|
if (existingUser != null) {
|
||||||
|
result.put("success", false);
|
||||||
|
result.put("message", "用户名已存在");
|
||||||
|
return ResponseEntity.badRequest().body(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存原始密码并加密
|
||||||
|
if (user.getPassword() != null && !user.getPassword().trim().isEmpty()) {
|
||||||
|
// 保存原始密码
|
||||||
|
user.setOriginalPassword(user.getPassword());
|
||||||
|
// 对密码进行加密
|
||||||
|
String encryptedPassword = PasswordUtil.encryptPasswordWithDefaultSalt(user.getPassword());
|
||||||
|
user.setPassword(encryptedPassword);
|
||||||
|
}
|
||||||
|
|
||||||
boolean success = userService.save(user);
|
boolean success = userService.save(user);
|
||||||
if (success) {
|
if (success) {
|
||||||
result.put("success", true);
|
result.put("success", true);
|
||||||
@@ -176,6 +219,23 @@ public class UserController {
|
|||||||
return ResponseEntity.badRequest().body(result);
|
return ResponseEntity.badRequest().body(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查用户名是否已被其他用户使用
|
||||||
|
User existingUser = userService.getUserByUserName(user.getUserName());
|
||||||
|
if (existingUser != null && !existingUser.getUserId().equals(user.getUserId())) {
|
||||||
|
result.put("success", false);
|
||||||
|
result.put("message", "用户名已被其他用户使用");
|
||||||
|
return ResponseEntity.badRequest().body(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果密码不为空,则保存原始密码并加密
|
||||||
|
if (user.getPassword() != null && !user.getPassword().trim().isEmpty()) {
|
||||||
|
// 保存原始密码
|
||||||
|
user.setOriginalPassword(user.getPassword());
|
||||||
|
// 对密码进行加密
|
||||||
|
String encryptedPassword = PasswordUtil.encryptPasswordWithDefaultSalt(user.getPassword());
|
||||||
|
user.setPassword(encryptedPassword);
|
||||||
|
}
|
||||||
|
|
||||||
boolean success = userService.updateById(user);
|
boolean success = userService.updateById(user);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
|
|||||||
@@ -281,3 +281,6 @@ public class UserRoleController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ public class User implements Serializable {
|
|||||||
@TableField("password")
|
@TableField("password")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
|
@Schema(description = "原始密码")
|
||||||
|
@TableField("original_password")
|
||||||
|
private String originalPassword;
|
||||||
|
|
||||||
@Schema(description = "token令牌")
|
@Schema(description = "token令牌")
|
||||||
@TableField("token")
|
@TableField("token")
|
||||||
private String token;
|
private String token;
|
||||||
|
|||||||
@@ -26,11 +26,11 @@ public class UserRole implements Serializable {
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Schema(description = "用户编号")
|
@Schema(description = "用户编号")
|
||||||
@TableId("user_id")
|
@TableField("user_id")
|
||||||
private Integer userId;
|
private Integer userId;
|
||||||
|
|
||||||
@Schema(description = "角色编号")
|
@Schema(description = "角色编号")
|
||||||
@TableId("role_id")
|
@TableField("role_id")
|
||||||
private Integer roleId;
|
private Integer roleId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ CREATE TABLE `user` (
|
|||||||
`user_name` varchar(255) DEFAULT NULL COMMENT '用户名称',
|
`user_name` varchar(255) DEFAULT NULL COMMENT '用户名称',
|
||||||
`email` varchar(255) DEFAULT NULL COMMENT '邮箱',
|
`email` varchar(255) DEFAULT NULL COMMENT '邮箱',
|
||||||
`password` varchar(255) DEFAULT NULL COMMENT '密码',
|
`password` varchar(255) DEFAULT NULL COMMENT '密码',
|
||||||
|
`original_password` varchar(255) DEFAULT NULL COMMENT '原始密码',
|
||||||
`token` varchar(255) DEFAULT NULL COMMENT 'token令牌',
|
`token` varchar(255) DEFAULT NULL COMMENT 'token令牌',
|
||||||
`avatar` varchar(255) DEFAULT NULL COMMENT '头像',
|
`avatar` varchar(255) DEFAULT NULL COMMENT '头像',
|
||||||
PRIMARY KEY (`user_id`)
|
PRIMARY KEY (`user_id`)
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
public interface MenuMapper extends BaseMapper<Menu> {
|
public interface MenuMapper extends BaseMapper<Menu> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
public interface RoleMapper extends BaseMapper<Role> {
|
public interface RoleMapper extends BaseMapper<Role> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
public interface UserMapper extends BaseMapper<User> {
|
public interface UserMapper extends BaseMapper<User> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
public interface UserRoleMapper extends BaseMapper<UserRole> {
|
public interface UserRoleMapper extends BaseMapper<UserRole> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
public interface IMenuService extends IService<Menu> {
|
public interface IMenuService extends IService<Menu> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
public interface IRoleService extends IService<Role> {
|
public interface IRoleService extends IService<Role> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
public interface IUserRoleService extends IService<UserRole> {
|
public interface IUserRoleService extends IService<UserRole> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.rj.service.sys;
|
package com.rj.service.sys;
|
||||||
|
|
||||||
import com.rj.entity.sys.User;
|
import com.rj.entity.sys.User;
|
||||||
|
import com.rj.pojo.sys.LoginRequest;
|
||||||
|
import com.rj.pojo.sys.LoginResponse;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,4 +15,32 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
*/
|
*/
|
||||||
public interface IUserService extends IService<User> {
|
public interface IUserService extends IService<User> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户登录
|
||||||
|
*
|
||||||
|
* @param loginRequest 登录请求
|
||||||
|
* @return 登录响应
|
||||||
|
*/
|
||||||
|
LoginResponse login(LoginRequest loginRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据用户名查询用户
|
||||||
|
*
|
||||||
|
* @param userName 用户名
|
||||||
|
* @return 用户信息
|
||||||
|
*/
|
||||||
|
User getUserByUserName(String userName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据token查询用户
|
||||||
|
*
|
||||||
|
* @param token 用户token
|
||||||
|
* @return 用户信息
|
||||||
|
*/
|
||||||
|
User getUserByToken(String token);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过token查询用户信息
|
||||||
|
*/
|
||||||
|
User getUserInfoByToken(String token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,3 +18,6 @@ import org.springframework.stereotype.Service;
|
|||||||
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
|
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,3 +18,6 @@ import org.springframework.stereotype.Service;
|
|||||||
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
|
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,3 +18,6 @@ import org.springframework.stereotype.Service;
|
|||||||
public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements IUserRoleService {
|
public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements IUserRoleService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
package com.rj.service.sys.impl;
|
package com.rj.service.sys.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.rj.common.PasswordUtil;
|
||||||
import com.rj.entity.sys.User;
|
import com.rj.entity.sys.User;
|
||||||
import com.rj.mapper.sys.UserMapper;
|
import com.rj.mapper.sys.UserMapper;
|
||||||
|
import com.rj.pojo.sys.LoginRequest;
|
||||||
|
import com.rj.pojo.sys.LoginResponse;
|
||||||
import com.rj.service.sys.IUserService;
|
import com.rj.service.sys.IUserService;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* 用户表 服务实现类
|
* 用户表 服务实现类
|
||||||
@@ -17,4 +28,58 @@ import org.springframework.stereotype.Service;
|
|||||||
@Service
|
@Service
|
||||||
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
|
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LoginResponse login(LoginRequest loginRequest) {
|
||||||
|
// 根据用户名查询用户
|
||||||
|
User user = getUserByUserName(loginRequest.getUserName());
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
throw new RuntimeException("用户不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证密码
|
||||||
|
if (!PasswordUtil.verifyPassword(loginRequest.getPassword(), user.getPassword())) {
|
||||||
|
throw new RuntimeException("密码错误");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成token
|
||||||
|
String token = UUID.randomUUID().toString().replace("-", "");
|
||||||
|
|
||||||
|
// 更新用户的token
|
||||||
|
user.setToken(token);
|
||||||
|
this.updateById(user);
|
||||||
|
|
||||||
|
// 构建登录响应
|
||||||
|
LoginResponse loginResponse = new LoginResponse();
|
||||||
|
loginResponse.setUserId(user.getUserId());
|
||||||
|
loginResponse.setUserName(user.getUserName());
|
||||||
|
loginResponse.setEmail(user.getEmail());
|
||||||
|
loginResponse.setAvatar(user.getAvatar());
|
||||||
|
loginResponse.setToken(token);
|
||||||
|
loginResponse.setLoginTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||||
|
|
||||||
|
return loginResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User getUserByUserName(String userName) {
|
||||||
|
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(User::getUserName, userName);
|
||||||
|
return this.getOne(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User getUserByToken(String token) {
|
||||||
|
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(User::getToken, token);
|
||||||
|
return this.getOne(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User getUserInfoByToken(String token) {
|
||||||
|
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(User::getToken, token);
|
||||||
|
return this.getOne(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ logging:
|
|||||||
# MyBatis SQL日志
|
# MyBatis SQL日志
|
||||||
com.rj.mapper: DEBUG
|
com.rj.mapper: DEBUG
|
||||||
# 数据库连接池日志
|
# 数据库连接池日志
|
||||||
com.zaxxer.hikari: DEBUG
|
# com.zaxxer.hikari: DEBUG
|
||||||
# Spring JDBC日志
|
# Spring JDBC日志
|
||||||
org.springframework.jdbc: DEBUG
|
# org.springframework.jdbc: DEBUG
|
||||||
# 显示SQL参数
|
# 显示SQL参数
|
||||||
com.baomidou.mybatisplus.core.executor: DEBUG
|
com.baomidou.mybatisplus.core.executor: DEBUG
|
||||||
# 显示SQL执行时间
|
# 显示SQL执行时间
|
||||||
|
|||||||
@@ -19,3 +19,6 @@
|
|||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,3 +14,4 @@
|
|||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|||||||
@@ -18,3 +18,4 @@
|
|||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="com.rj.mapper.sys.UserRoleMapper">
|
|
||||||
|
|
||||||
<!-- 通用查询映射结果 -->
|
|
||||||
<resultMap id="BaseResultMap" type="com.rj.entity.sys.UserRole">
|
|
||||||
<id column="user_id" property="userId" />
|
|
||||||
<id column="role_id" property="roleId" />
|
|
||||||
</resultMap>
|
|
||||||
|
|
||||||
<!-- 通用查询结果列 -->
|
|
||||||
<sql id="Base_Column_List">
|
|
||||||
user_id, role_id
|
|
||||||
</sql>
|
|
||||||
|
|
||||||
</mapper>
|
|
||||||
Reference in New Issue
Block a user