ruoyi-flex/ruoyi-admin/src/main/java/com/ruoyi/web/controller/AuthController.java
dataprince 64685e74f9 同步ruoyi-vue-plus的2023-11-17至2023-11-23的更新
(1)fix 修复 OssFactory 并发多创建实例问题
   (2)update 优化 删除无用接口实现
   (3)!454 添加excel多sheet页导出
   (4)update 优化 重构 LoginHelper 将本地存储代码操作封装
   (5)update 优化 删除无用依赖
   (6)update 优化 删除无用注解
   (7)update 优化 更新用户异常提示 使用登录账号
   (8)fix 修复 token 失效后 登录获取用户null问题
   (9)fix 修复 session 多账号共用覆盖问题 改为 tokenSession 独立存储
   (10)add 新增 RedisUtils.setObjectIfExists 如果存在则设置方法
   (11)update transmittable-thread-local 2.14.2 => 2.14.4
   (12)update 优化 删除 hikaricp 官方不推荐使用的配置 jdbc4 协议自带校验方法
   (13)update 优化 开启 redisson 脚本缓存 减少网络传输
   (14)升级依赖update easyexcel 3.3.2 => 3.3.3
     update springboot-admin 3.1.7 => 3.1.8
     update aws-java-sdk-s3 1.12.540 => 1.12.600
   (15)细化oss配置管理权限控制,需要执行更新数据库脚本update.sql
   (16)update 优化 将 OSS配置 改为全局模式
   (17)fix 修复 excel合并注解会根据第一合并列的结果来决定后续的列合并
   (18)fix 修复 MybatisSystemException 空指针问题
   (19)update 优化 删除无用异常类
   (20)update 优化 验证码接口 增加限流配置
   (21)update 优化 丰富RedisUtils对List Set类型的操作
2023-12-25 16:16:02 +08:00

150 lines
4.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ruoyi.web.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.ObjectUtil;
import com.mybatisflex.core.query.QueryWrapper;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.core.domain.AjaxResult;
import com.ruoyi.common.core.core.domain.model.LoginUser;
import com.ruoyi.common.security.utils.LoginHelper;
import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.domain.vo.SysUserVo;
import com.ruoyi.system.service.*;
import com.ruoyi.web.domain.vo.LoginVo;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.ruoyi.common.core.core.domain.R;
import com.ruoyi.common.core.core.domain.model.LoginBody;
import com.ruoyi.common.core.core.domain.model.RegisterBody;
import com.ruoyi.common.core.utils.MessageUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.domain.SysClient;
import com.ruoyi.web.service.IAuthStrategy;
import com.ruoyi.web.service.SysLoginService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Set;
import static com.ruoyi.system.domain.table.SysClientTableDef.SYS_CLIENT;
/**
* 认证
*
* @author Lion Li
*/
@Slf4j
@SaIgnore
@Validated
@RequiredArgsConstructor
@RestController
public class AuthController {
@Resource
private final SysLoginService loginService;
@Resource
private final ISysClientService clientService;
@Resource
private final ISysUserService sysUserService;
@Resource
private final ISysPermissionService permissionService;
@Resource
private ISysMenuService menuService;
/**
* 登录方法
*
* @param loginBody 登录信息
* @return 结果
*/
@PostMapping("/login")
public R<LoginVo> login(@RequestBody LoginBody loginBody) {
AjaxResult ajax = AjaxResult.success();
// 授权类型和客户端id
String clientId = loginBody.getClientId();
String grantType = loginBody.getGrantType();
QueryWrapper query=QueryWrapper.create().from(SYS_CLIENT).where(SYS_CLIENT.CLIENT_ID.eq(clientId));
SysClient client = clientService.getOne(query);
// 查询不到 client 或 client 内不包含 grantType
if (ObjectUtil.isNull(client) || !StringUtils.contains(client.getGrantType(), grantType)) {
log.info("客户端id: {} 认证类型:{} 异常!.", clientId, grantType);
return R.fail(MessageUtils.message("auth.grant.type.error"));
}
// TODO:校验租户
//loginService.checkTenant(loginBody.getTenantId());
// 登录
return R.ok(IAuthStrategy.login(loginBody, client));
}
/**
* 获取用户信息
*
* @return 用户信息
*/
@GetMapping("/getInfo")
public AjaxResult getInfo() {
LoginUser loginUser = LoginHelper.getLoginUser();
//TODO:多租户 超级管理员 如果重新加载用户信息需清除动态租户
SysUserVo user = sysUserService.selectUserById(loginUser.getUserId());
// 角色集合
Set<String> roles = permissionService.getRolePermission(user.getUserId());
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user.getUserId());
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
ajax.put("permissions", permissions);
return ajax;
}
/**
* 获取路由信息
*
* @return 路由信息
*/
@GetMapping("/getRouters")
public AjaxResult getRouters()
{
LoginUser loginUser = LoginHelper.getLoginUser();
// 用户信息
SysUserVo user = sysUserService.selectUserById(loginUser.getUserId());
List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId());
return AjaxResult.success(menuService.buildMenus(menus));
}
/**
* 退出登录
*/
@PostMapping("/logout")
public R<Void> logout() {
loginService.logout();
return R.ok("退出成功!");
}
/**
* 用户注册
*/
@PostMapping("LoginHelper.getUserId()")
public R<Void> register(@Validated @RequestBody RegisterBody user) {
//if (!configService.selectRegisterEnabled(user.getTenantId())) // TODO注册代码
{
return R.fail("当前系统没有开启注册功能!");
}
// registerService.register(user);
// return R.ok();
}
}