saas 优化

dev.breakdown
刘武 2024-09-26 15:26:07 +08:00
parent 981706944a
commit 0595237e8b
12 changed files with 111 additions and 24 deletions

View File

@ -42,11 +42,12 @@ public class TokenController {
Firm firm = sysFirmService.findFirmByName(form.getFirmName()); Firm firm = sysFirmService.findFirmByName(form.getFirmName());
//不能存在提示 //不能存在提示
if (firm==null){ if (firm.getDatabaseName()==null){
return Result.error(null,"公司不存在"); return Result.error(null,"公司不存在");
} }
// 用户登录 // 用户登录
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); LoginUser userInfo = sysLoginService.login(firm.getDatabaseName(),form.getUsername(), form.getPassword());
// 获取登录token // 获取登录token
return Result.success(tokenService.createToken(userInfo)); return Result.success(tokenService.createToken(userInfo));
} }

View File

@ -12,6 +12,7 @@ import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.utils.ip.IpUtils; import com.muyu.common.core.utils.ip.IpUtils;
import com.muyu.common.redis.service.RedisService; import com.muyu.common.redis.service.RedisService;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.Firm;
import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.system.remote.RemoteUserService;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser; import com.muyu.common.system.domain.LoginUser;
@ -40,7 +41,7 @@ public class SysLoginService {
/** /**
* *
*/ */
public LoginUser login (String username, String password) { public LoginUser login (String databaseName,String username, String password) {
// 用户名或密码为空 错误 // 用户名或密码为空 错误
if (StringUtils.isAnyBlank(username, password)) { if (StringUtils.isAnyBlank(username, password)) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写"); recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
@ -64,8 +65,14 @@ public class SysLoginService {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾访问IP已被列入系统黑名单"); recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾访问IP已被列入系统黑名单");
throw new ServiceException("很遗憾访问IP已被列入系统黑名单"); throw new ServiceException("很遗憾访问IP已被列入系统黑名单");
} }
Firm firm = new Firm();
firm.setDatabaseName(databaseName);
firm.setUserName(username);
// 查询用户信息 // 查询用户信息
Result<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); Result<LoginUser> userResult = remoteUserService.getUserInfo(firm, SecurityConstants.INNER);
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");

View File

@ -0,0 +1,22 @@
package com.muyu.common.system.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Firm {
private Integer id;
private String firmName;
private String databaseName;
private String userName;
}

View File

@ -4,6 +4,7 @@ import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.constant.ServiceNameConstants; import com.muyu.common.core.constant.ServiceNameConstants;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.common.system.domain.Firm;
import com.muyu.common.system.domain.SysFirmUser; import com.muyu.common.system.domain.SysFirmUser;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory;
@ -23,13 +24,13 @@ public interface RemoteUserService {
/** /**
* *
* *
* @param username * @param
* @param source * @param source
* *
* @return * @return
*/ */
@GetMapping("/user/info/{username}") @PostMapping("/user/info")
public Result<LoginUser> getUserInfo (@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public Result<LoginUser> getUserInfo (@RequestBody Firm firm, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/** /**
* *

View File

@ -2,6 +2,7 @@ package com.muyu.common.system.remote.factory;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.common.system.domain.Firm;
import com.muyu.common.system.domain.SysFirmUser; import com.muyu.common.system.domain.SysFirmUser;
import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.system.remote.RemoteUserService;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
@ -26,8 +27,10 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
public RemoteUserService create (Throwable throwable) { public RemoteUserService create (Throwable throwable) {
log.error("用户服务调用失败:{}", throwable.getMessage()); log.error("用户服务调用失败:{}", throwable.getMessage());
return new RemoteUserService() { return new RemoteUserService() {
@Override @Override
public Result<LoginUser> getUserInfo (String username, String source) { public Result<LoginUser> getUserInfo(Firm firm, String source) {
return Result.error("获取用户失败:" + throwable.getMessage()); return Result.error("获取用户失败:" + throwable.getMessage());
} }

View File

@ -80,6 +80,11 @@
<artifactId>cloud-common-api-doc</artifactId> <artifactId>cloud-common-api-doc</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-saas</artifactId>
</dependency>
</dependencies> </dependencies>

View File

@ -7,7 +7,7 @@ nacos:
addr: 47.101.53.251:8848 addr: 47.101.53.251:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: lgy namespace: four
# Spring # Spring
spring: spring:

View File

@ -9,6 +9,7 @@ import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType; import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.service.TokenService; import com.muyu.common.security.service.TokenService;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.Firm;
import com.muyu.common.system.remote.RemoteFileService; import com.muyu.common.system.remote.RemoteFileService;
import com.muyu.common.system.domain.SysFile; import com.muyu.common.system.domain.SysFile;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
@ -43,8 +44,12 @@ public class SysProfileController extends BaseController {
*/ */
@GetMapping @GetMapping
public Result profile () { public Result profile () {
String username = SecurityUtils.getUsername(); LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser user = userService.selectUserByUserName(username); String username = loginUser.getUsername();
Firm firm = new Firm();
firm.setUserName(username);
SysUser user = userService.selectUserByUserName(firm);
return Result.success( return Result.success(
ProfileResp.builder() ProfileResp.builder()
.roleGroup( userService.selectUserRoleGroup(username) ) .roleGroup( userService.selectUserRoleGroup(username) )
@ -87,7 +92,9 @@ public class SysProfileController extends BaseController {
@PutMapping("/updatePwd") @PutMapping("/updatePwd")
public Result updatePwd (String oldPassword, String newPassword) { public Result updatePwd (String oldPassword, String newPassword) {
String username = SecurityUtils.getUsername(); String username = SecurityUtils.getUsername();
SysUser user = userService.selectUserByUserName(username); Firm firm = new Firm();
firm.setUserName(username);
SysUser user = userService.selectUserByUserName(firm);
String password = user.getPassword(); String password = user.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password)) { if (!SecurityUtils.matchesPassword(oldPassword, password)) {
return error("修改密码失败,旧密码错误"); return error("修改密码失败,旧密码错误");

View File

@ -10,10 +10,7 @@ import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.InnerAuth; import com.muyu.common.security.annotation.InnerAuth;
import com.muyu.common.security.annotation.RequiresPermissions; import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.SysDept; import com.muyu.common.system.domain.*;
import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser;
import com.muyu.system.domain.resp.AuthRoleResp; import com.muyu.system.domain.resp.AuthRoleResp;
import com.muyu.system.domain.resp.UserDetailInfoResp; import com.muyu.system.domain.resp.UserDetailInfoResp;
import com.muyu.system.domain.resp.UserInfoResp; import com.muyu.system.domain.resp.UserInfoResp;
@ -103,9 +100,9 @@ public class SysUserController extends BaseController {
* *
*/ */
@InnerAuth @InnerAuth
@GetMapping("/info/{username}") @PostMapping("/info")
public Result<LoginUser> info (@PathVariable("username") String username) { public Result<LoginUser> info (@RequestBody Firm firm) {
SysUser sysUser = userService.selectUserByUserName(username); SysUser sysUser = userService.selectUserByUserName(firm);
if (StringUtils.isNull(sysUser)) { if (StringUtils.isNull(sysUser)) {
return Result.error("用户名或密码错误"); return Result.error("用户名或密码错误");
} }

View File

@ -18,6 +18,7 @@ public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
* *
* @return * @return
*/ */
public List<SysDictType> selectDictTypeList (SysDictType dictType); public List<SysDictType> selectDictTypeList (SysDictType dictType);
/** /**

View File

@ -1,6 +1,7 @@
package com.muyu.system.service; package com.muyu.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.common.system.domain.Firm;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import java.util.List; import java.util.List;
@ -45,7 +46,7 @@ public interface SysUserService extends IService<SysUser> {
* *
* @return * @return
*/ */
public SysUser selectUserByUserName (String userName); public SysUser selectUserByUserName (Firm firm);
/** /**
* ID * ID

View File

@ -8,6 +8,8 @@ import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.utils.bean.BeanValidators; import com.muyu.common.core.utils.bean.BeanValidators;
import com.muyu.common.datascope.annotation.DataScope; import com.muyu.common.datascope.annotation.DataScope;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.Firm;
import com.muyu.common.system.domain.SysDept;
import com.muyu.common.system.domain.SysRole; import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.system.domain.SysPost; import com.muyu.system.domain.SysPost;
@ -99,14 +101,18 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* @return * @return
*/ */
@Override @Override
public SysUser selectUserByUserName (String userName) { public SysUser selectUserByUserName (Firm firm) {
String databaseName = firm.getDatabaseName();
String userName = firm.getUserName();
String user="root"; String user="root";
String password="Lw030106"; String password="Lw030106";
SysUser sysUser=new SysUser(); SysUser sysUser=new SysUser();
try { try {
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
Connection connection = DriverManager.getConnection("jdbc:mysql://47.101.53.251:3306/datasource?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&useSSL=false", user, password); Connection connection = DriverManager.getConnection("jdbc:mysql://47.101.53.251:3306/"+databaseName+"?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&useSSL=false", user, password);
String sql="select u.user_id,\n" + String sql="select u.user_id,\n" +
" u.dept_id,\n" + " u.dept_id,\n" +
" u.user_name,\n" + " u.user_name,\n" +
@ -136,12 +142,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
" r.role_key,\n" + " r.role_key,\n" +
" r.role_sort,\n" + " r.role_sort,\n" +
" r.data_scope,\n" + " r.data_scope,\n" +
" r.status as role_status\n" + " r.status as role_status " +
" from sys_user u\n" + " from sys_user u\n" +
" left join sys_dept d on u.dept_id = d.dept_id\n" + " left join sys_dept d on u.dept_id = d.dept_id\n" +
" left join sys_user_role ur on u.user_id = ur.user_id\n" + " left join sys_user_role ur on u.user_id = ur.user_id\n" +
" left join sys_role r on r.role_id = ur.role_id" + " left join sys_role r on r.role_id = ur.role_id" +
"where u.del_flag = '0' and u.user_name = '"+userName+"'"; " where u.del_flag = '0' and u.user_name = '"+userName+"'";
Statement stmt = connection.createStatement(); Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql); ResultSet rs = stmt.executeQuery(sql);
@ -151,7 +157,43 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUser.setDeptId(rs.getLong("dept_id")); sysUser.setDeptId(rs.getLong("dept_id"));
sysUser.setUserName(rs.getString("user_name")); sysUser.setUserName(rs.getString("user_name"));
sysUser.setNickName(rs.getString("nick_name")); sysUser.setNickName(rs.getString("nick_name"));
sysUser.setEmail(rs.getString("email"));
sysUser.setAvatar(rs.getString("avatar"));
sysUser.setPhonenumber(rs.getString("phonenumber"));
sysUser.setPassword(rs.getString("password"));
sysUser.setSex(rs.getString("sex"));
sysUser.setStatus(rs.getString("status"));
sysUser.setDatabaseName(rs.getString("database_name"));
sysUser.setDelFlag(rs.getString("del_flag"));
sysUser.setLoginIp(rs.getString("login_ip"));
sysUser.setLoginDate(rs.getDate("login_date"));
sysUser.setCreateBy(rs.getString("create_by"));
sysUser.setCreateTime(rs.getDate("create_time"));
SysDept sysDept = new SysDept();
sysDept.setDeptId(rs.getLong("dept_id"));
sysDept.setParentId(rs.getLong("parent_id"));
sysDept.setAncestors(rs.getString("ancestors"));
sysDept.setDeptName(rs.getString("dept_name"));
sysDept.setOrderNum(rs.getInt("order_num"));
sysDept.setLeader(rs.getString("leader"));
sysDept.setStatus(rs.getString("dept_status"));
sysUser.setDept(sysDept);
SysRole sysRole = new SysRole();
sysRole.setRoleId(rs.getLong("role_id"));
sysRole.setRoleName(rs.getString("role_name"));
sysRole.setRoleKey(rs.getString("role_key"));
sysRole.setRoleSort(rs.getInt("role_sort"));
sysRole.setDataScope(rs.getString("data_scope"));
sysRole.setStatus(rs.getString("role_status"));
ArrayList<SysRole> sysRoles = new ArrayList<>();
sysRoles.add(sysRole);
sysUser.setRoles(sysRoles);
} }