diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysLoginController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysLoginController.java index 9f9672e4..99e9c126 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysLoginController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysLoginController.java @@ -3,6 +3,8 @@ package com.acupuncture.web.controller.system; import java.util.List; import java.util.Set; +import com.acupuncture.common.annotation.DataSource; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.system.domain.po.DmsTenant; import com.acupuncture.system.persist.mapper.DmsTenantMapper; import com.acupuncture.system.service.ISysUserService; @@ -66,23 +68,41 @@ public class SysLoginController return ajax; } + /** + * 登录方法 + * + * @param loginBody 登录信息 + * @return 结果 + */ + @PostMapping("/loginSimple") + public AjaxResult loginSimple(@RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = loginService.loginSimple(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + loginBody.getUuid()); + ajax.put(Constants.TOKEN, token); + return ajax; + } + /** * 获取用户信息 - * + * * @return 用户信息 */ @GetMapping("getInfo") public AjaxResult getInfo() { LoginUser loginUser = SecurityUtils.getLoginUser(); - SysUser user = sysUserService.selectUserByTenantId(null, loginUser.getUsername()); - if (user.getTenantId() != null) { - DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(user.getTenantId()); - if (dmsTenant != null) { - user.setTenantName(dmsTenant.getName()); - user.setTenantPhone(dmsTenant.getContactPhone()); - } - } + SysUser user = sysUserService.selectUserById(loginUser.getUser().getUserId()); +// SysUser user = sysUserService.selectUserByTenantId(null, loginUser.getUsername()); +// if (user.getTenantId() != null) { +// DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(user.getTenantId()); +// if (dmsTenant != null) { +// user.setTenantName(dmsTenant.getName()); +// user.setTenantPhone(dmsTenant.getContactPhone()); +// } +// } // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 @@ -99,6 +119,39 @@ public class SysLoginController return ajax; } +// /** +// * 获取用户信息 +// * +// * @return 用户信息 +// */ +// @GetMapping("getInfo") +// public AjaxResult getInfo() +// { +// LoginUser loginUser = SecurityUtils.getLoginUser(); +// SysUser user = sysUserService.selectUserByTenantId(null, loginUser.getUsername()); +// if (user.getTenantId() != null) { +// DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(user.getTenantId()); +// if (dmsTenant != null) { +// user.setTenantName(dmsTenant.getName()); +// user.setTenantPhone(dmsTenant.getContactPhone()); +// } +// } +// // 角色集合 +// Set roles = permissionService.getRolePermission(user); +// // 权限集合 +// Set permissions = permissionService.getMenuPermission(user); +// if (!loginUser.getPermissions().equals(permissions)) +// { +// loginUser.setPermissions(permissions); +// tokenService.refreshToken(loginUser); +// } +// AjaxResult ajax = AjaxResult.success(); +// ajax.put("user", user); +// ajax.put("roles", roles); +// ajax.put("permissions", permissions); +// return ajax; +// } + /** * 获取路由信息 * diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java index 580e64d1..6b2f073b 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java @@ -103,6 +103,8 @@ public class AdminDmsUserController { user.setCreateBy(SecurityUtils.getUsername()); user.setPhonenumber(dto.getContactPhone()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setTenantName(dmsTenant.getName()); + user.setTenantPhone(dmsTenant.getContactPhone()); int insert = userService.insertUser(user); //销毁切换数据源 diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java index 91360ec3..73782849 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java @@ -1,5 +1,6 @@ package com.acupuncture.web.controller.web; +import com.acupuncture.common.annotation.DataSource; import com.acupuncture.common.annotation.Log; import com.acupuncture.common.constant.Constants; import com.acupuncture.common.core.domain.AjaxResult; @@ -8,6 +9,7 @@ import com.acupuncture.common.core.domain.entity.SysUser; import com.acupuncture.common.core.domain.model.LoginBody; import com.acupuncture.common.core.domain.model.LoginUser; import com.acupuncture.common.enums.BusinessType; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.framework.web.service.SysPermissionService; import com.acupuncture.framework.web.service.TokenService; @@ -52,6 +54,7 @@ public class DmsLoginController { * @param loginBody 登录信息 * @return 结果 */ + @DataSource(DataSourceType.MASTER) @PostMapping("/login") public AjaxResult login(@RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); @@ -62,6 +65,24 @@ public class DmsLoginController { return ajax; } + /** + * 登录方法 + * + * @param loginBody 登录信息 + * @return 结果 + */ + @DataSource(DataSourceType.MASTER) + @PostMapping("/loginSimple") + public AjaxResult loginSimple(@RequestBody LoginBody loginBody) { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = webDmsLoginService.loginSimple(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + loginBody.getUuid()); + ajax.put(Constants.TOKEN, token); + return ajax; + } + + /** * 获取用户信息 * diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java index 9cfdff86..ac4e67c3 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java @@ -4,8 +4,10 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import com.acupuncture.common.annotation.Anonymous; +import com.acupuncture.common.annotation.DataSource; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; import com.acupuncture.system.domain.dto.FmsFollowupDto; @@ -56,6 +58,7 @@ public class FmsFollowupController { @ApiOperation("查询公共队列") @PostMapping("/commonQueue") @Anonymous + @DataSource(DataSourceType.MASTER) public JsonResponse> queryCommonQueue(@RequestBody @Validated BaseDto dto) { if (dto.getPageNum() > 0) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); diff --git a/acupuncture-framework/src/main/java/com/acupuncture/framework/config/SecurityConfig.java b/acupuncture-framework/src/main/java/com/acupuncture/framework/config/SecurityConfig.java index aeb17097..8bc43fea 100644 --- a/acupuncture-framework/src/main/java/com/acupuncture/framework/config/SecurityConfig.java +++ b/acupuncture-framework/src/main/java/com/acupuncture/framework/config/SecurityConfig.java @@ -114,7 +114,7 @@ public class SecurityConfig .authorizeHttpRequests((requests) -> { permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); // 对于登录login 注册register 验证码captchaImage 允许匿名访问 - requests.antMatchers("/login", "/register", "/captchaImage", "/web/login", "/web/queryTenantById", "/api/http/getUserInfo", "/api/http/addReportImage", "/api/http/uploadMemberInfo", "/task/task").permitAll() + requests.antMatchers("/login", "/register", "/captchaImage", "/web/login", "/web/queryTenantById", "/api/http/getUserInfo", "/api/http/addReportImage", "/api/http/uploadMemberInfo", "/task/task", "/loginSimple").permitAll() // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**", "/static/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() diff --git a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/SysLoginService.java b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/SysLoginService.java index 8efafe15..097e82ac 100644 --- a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/SysLoginService.java +++ b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/SysLoginService.java @@ -100,6 +100,54 @@ public class SysLoginService return tokenService.createToken(loginUser); } + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public String loginSimple(String username, String password, String code, String uuid) + { + // 验证码校验 +// validateCaptcha(username, code, uuid); + // 登录前置校验 + loginPreCheck(username, password); + // 用户验证 + Authentication authentication = null; + try + { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 生成token + return tokenService.createToken(loginUser); + } + /** * 登录验证 * diff --git a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java index f5a40b40..b1817e21 100644 --- a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java +++ b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java @@ -98,6 +98,54 @@ public class WebDmsLoginService return tokenService.createToken(loginUser); } + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public String loginSimple(String username, String password, String code, String uuid) + { + // 验证码校验 + validateCaptcha(username, code, uuid); + // 登录前置校验 + loginPreCheck(username, password); + // 用户验证 + Authentication authentication = null; + try + { + DmsUserAuthenticationToken authenticationToken = new DmsUserAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 生成token + return tokenService.createToken(loginUser); + } + /** * 登录验证 * diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java index 5c4000c6..326b4c74 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java @@ -19,7 +19,6 @@ public interface FmsFollowupQueueService { * 查询公共队列 * @return */ - @DataSource(DataSourceType.MASTER) List queryCommonQueue(String name); } diff --git a/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml b/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml index 322dfd54..1755a8c0 100644 --- a/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -25,6 +25,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -49,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select u.user_id, u.tenant_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.slaver_admin, + select u.user_id, u.tenant_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.slaver_admin, u.tenant_name, u.tenant_phone, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u @@ -168,7 +170,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, create_by, remark, - slaver_admin, + slaver_admin, + tenant_name, + tenant_phone, create_time )values( #{userId}, @@ -184,7 +188,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{createBy}, #{remark}, - #{slaverAdmin}, + #{slaverAdmin}, + #{tenantName}, + #{tenantPhone}, sysdate() )