Merge remote-tracking branch 'origin/master'

master
river 4 years ago
commit 5075e01b19
  1. 25
      dq-financial-api/src/main/java/com/daqing/financial/hrauth/SystemLogControllerApi.java
  2. 3
      dq-financial-api/src/main/java/com/daqing/financial/hrauth/UserLoginControllerApi.java
  3. 83
      dq-financial-crms/src/main/java/com/daqing/financial/crms/config/CorsConfig.java
  4. 9
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/aspect/Operation.java
  5. 19
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/aspect/SysLogAspect.java
  6. 56
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/SystemLogController.java
  7. 8
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/UserLoginController.java
  8. 6
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/dao/LoginLogMapper.java
  9. 8
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/dao/SystemLogMapper.java
  10. 4
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/LoginLogService.java
  11. 11
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/SystemLogService.java
  12. 3
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/UserLoginService.java
  13. 19
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/impl/LoginLogServiceImpl.java
  14. 32
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/impl/SystemLogServiceImpl.java
  15. 63
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/impl/UserLoginServiceImpl.java
  16. 3
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/IpUtils.java
  17. 4
      dq-financial-hrms-auth/src/main/resources/bootstrap.properties
  18. 39
      dq-financial-hrms-auth/src/main/resources/mapper/hrmsauth/LoginLogMapper.xml
  19. 16
      dq-financial-hrms-auth/src/main/resources/mapper/hrmsauth/SystemLogMapper.xml
  20. 2
      dq-financial-hrms-auth/src/main/resources/mapper/hrmsauth/UserLoginMapper.xml
  21. 66
      dq-financial-hrms/src/main/java/com/daqing/financial/hrms/config/CorsConfig.java
  22. 18
      dq-financial-hrms/src/main/resources/bootstrap.properties
  23. 9
      dq-framework-common/src/main/java/com/daqing/framework/util/JwtUtils.java
  24. 44
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/LoginLogEntity.java
  25. 40
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/request/UpdatePwdRequest.java
  26. 32
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/request/UserLoginLogRequest.java
  27. 5
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/request/UserLoginRequest.java
  28. 2
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/response/HrmsCode.java
  29. 3
      dq-govern-gateway/src/main/java/com/daqing/financial/gateway/config/ApiGlobalFilter.java
  30. 9
      dq-govern-gateway/src/main/java/com/daqing/financial/gateway/config/FinancialCorsConfiguration.java
  31. 5
      dq-govern-gateway/src/main/resources/jwt.properties

@ -0,0 +1,25 @@
package com.daqing.financial.hrauth;
import com.daqing.framework.domain.crms.request.CustomerRequest;
import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.UserLoginLogRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.model.response.ResponseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* @Author: gongsj.
* @Description: 登录controllerApi定义
* @Date:Created in 2020/09/07 11:33.
* @Modified By:
*/
@Api(value = "系统日志相关操作", tags = "提供系统日志相关操作")
public interface SystemLogControllerApi {
@ApiOperation(value = "系统日志列表")
ResponseResult list(Integer page, Integer size);
@ApiOperation(value = "登录日志列表")
ResponseResult loginLogList(Integer page, Integer size, UserLoginLogRequest userLoginLogRequest);
}

@ -1,6 +1,7 @@
package com.daqing.financial.hrauth; package com.daqing.financial.hrauth;
import com.daqing.framework.domain.hrms.request.LoginRequest; import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest; import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.model.response.ResponseResult; import com.daqing.framework.model.response.ResponseResult;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -26,5 +27,7 @@ public interface UserLoginControllerApi {
@ApiOperation(value = "登录") @ApiOperation(value = "登录")
ResponseResult login(LoginRequest loginRequest); ResponseResult login(LoginRequest loginRequest);
@ApiOperation(value = "修改超管员密码")
ResponseResult updatePwd(UpdatePwdRequest user);
} }

@ -1,33 +1,50 @@
package com.daqing.financial.crms.config; //package com.daqing.financial.crms.config;
//
import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Configuration; //import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.cors.CorsConfiguration; //import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; //import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.filter.CorsFilter; //import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
//
/** //import javax.servlet.http.HttpServletRequest;
* 实现基本的跨域请求 //import javax.servlet.http.HttpServletResponse;
* //
* @auther River ///**
* @date 2020/9/25 15:09 // * 实现基本的跨域请求
*/ // *
@Configuration // * @auther River
public class CorsConfig { // * @date 2020/9/25 15:09
// */
@Bean //@Configuration
public CorsFilter corsFilter() { //public class CorsConfig extends WebMvcConfigurerAdapter {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); //
final CorsConfiguration corsConfiguration = new CorsConfiguration(); //
/*是否允许请求带有验证信息*/ // @Override
corsConfiguration.setAllowCredentials(true); // public void addInterceptors(InterceptorRegistry registry) {
/*允许访问的客户端域名*/ // registry.addInterceptor(new HandlerInterceptor() {
corsConfiguration.addAllowedOrigin("*"); // @Override
/*允许服务端访问的客户端请求头*/ // public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
corsConfiguration.addAllowedHeader("*"); // throws Exception {
/*允许访问的方法名,GET POST等*/ // // boolean isTrue = envConfig.getIsDev();//判断是测试服才需要解决跨域问题
corsConfiguration.addAllowedMethod("*"); // //if (isTrue) {
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); // response.addHeader("Access-Control-Allow-Origin", "*");
return new CorsFilter(urlBasedCorsConfigurationSource); // response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
} // response.addHeader("Access-Control-Allow-Headers",
} // "Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,token");
// // }
// return true;
// }
//
// @Override
// public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
// ModelAndView modelAndView) throws Exception {
//
// }
//
// @Override
// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
// Exception ex) throws Exception {
// }
// });
// }
//}

@ -1,5 +1,6 @@
package com.daqing.financial.hrauth.aspect; package com.daqing.financial.hrauth.aspect;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.daqing.financial.hrauth.annotation.Log; import com.daqing.financial.hrauth.annotation.Log;
@ -10,6 +11,7 @@ import com.daqing.financial.hrauth.util.IpUtils;
import com.daqing.framework.domain.hrms.SystemLog; import com.daqing.framework.domain.hrms.SystemLog;
import com.daqing.framework.domain.hrms.Token; import com.daqing.framework.domain.hrms.Token;
import com.daqing.framework.domain.hrms.UserEntity; import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.util.RedisUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
@ -100,8 +102,11 @@ public class Operation {
//User systemUser = (User) SecurityUtils.getSubject().getPrincipal(); //User systemUser = (User) SecurityUtils.getSubject().getPrincipal();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token"); String token = request.getHeader("token");
Token userToken = tokenService.getOne(new QueryWrapper<Token>().eq("token", token)); String userId = RedisUtil.get("dq:token:"+token);
UserEntity systemUser = userLoginService.getOne(new QueryWrapper<UserEntity>().eq("id",userToken.getUserId())); String userEntityStr = RedisUtil.get("dq:userId:"+userId);
UserEntity systemUser = JSON.parseObject(userEntityStr,UserEntity.class);
//Token userToken = tokenService.getOne(new QueryWrapper<Token>().eq("token", token));
//UserEntity systemUser = userLoginService.getOne(new QueryWrapper<UserEntity>().eq("id",userToken.getUserId()));
Map<Object, Object> map = new HashMap<>(4); Map<Object, Object> map = new HashMap<>(4);
for (int i = 0; i < argNames.length; i++) { for (int i = 0; i < argNames.length; i++) {

@ -1,5 +1,6 @@
package com.daqing.financial.hrauth.aspect; package com.daqing.financial.hrauth.aspect;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.daqing.financial.hrauth.annotation.Log; import com.daqing.financial.hrauth.annotation.Log;
@ -7,6 +8,7 @@ import com.daqing.financial.hrauth.service.TokenService;
import com.daqing.financial.hrauth.service.UserLoginService; import com.daqing.financial.hrauth.service.UserLoginService;
import com.daqing.framework.domain.hrms.Token; import com.daqing.framework.domain.hrms.Token;
import com.daqing.framework.domain.hrms.UserEntity; import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.util.RedisUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
@ -22,20 +24,15 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* @ClassName actionLogAspect * @ClassName SysLogAspect
* @Description 操作日志切面 * @Description 操作日志切面
* @Author Rogers * @Date 2020/9/30
* @Date 2020/7/3 23:24
* @Version 1.0 * @Version 1.0
*/ */
@Slf4j @Slf4j
@Aspect @Aspect
@Component @Component
public class SysLogAspect { public class SysLogAspect {
/* @Resource
private ISystemLogService logService;
@Resource
private SystemLogMapper systemLogMapper;*/
@Resource @Resource
private Operation operation; private Operation operation;
@ -68,8 +65,12 @@ public class SysLogAspect {
//User systemUser = (User) SecurityUtils.getSubject().getPrincipal(); //User systemUser = (User) SecurityUtils.getSubject().getPrincipal();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token"); String token = request.getHeader("token");
Token userToken = tokenService.getOne(new QueryWrapper<Token>().eq("token", token)); String userId = RedisUtil.get("dq:token:"+token);
UserEntity systemUser = userLoginService.getOne(new QueryWrapper<UserEntity>().eq("id",userToken.getUserId())); String userEntityStr = RedisUtil.get("dq:userId:"+userId);
UserEntity systemUser = JSON.parseObject(userEntityStr,UserEntity.class);
//Token userToken = tokenService.getOne(new QueryWrapper<Token>().eq("token", token));
//UserEntity systemUser = userLoginService.getOne(new QueryWrapper<UserEntity>().eq("id",userId));
operation.addOperationLog(joinPoint,res,time,systemUser); operation.addOperationLog(joinPoint,res,time,systemUser);
//方法执行完成后增加日志 //方法执行完成后增加日志
// addOperationLog(joinPoint, res, time); // addOperationLog(joinPoint, res, time);

@ -0,0 +1,56 @@
package com.daqing.financial.hrauth.controller;
import com.daqing.financial.hrauth.SystemLogControllerApi;
import com.daqing.financial.hrauth.UserLoginControllerApi;
import com.daqing.financial.hrauth.annotation.Log;
import com.daqing.financial.hrauth.enums.OperationType;
import com.daqing.financial.hrauth.enums.OperationUnit;
import com.daqing.financial.hrauth.service.LoginLogService;
import com.daqing.financial.hrauth.service.SystemLogService;
import com.daqing.financial.hrauth.service.UserLoginService;
import com.daqing.framework.domain.hrms.EmployeeEntity;
import com.daqing.framework.domain.hrms.SystemLog;
import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.UserLoginLogRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.model.response.ResponseResult;
import com.daqing.framework.utils.PageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @auther River
* @date 2020/9/22 15:27
*/
@RestController
@RequestMapping("/hrms/auth/systemLog")
@Api(tags = {"日志管理"})
public class SystemLogController implements SystemLogControllerApi {
@Autowired
private SystemLogService systemLogService;
@Autowired
private LoginLogService loginLogService;
@GetMapping("/list")
@Log(detail = "系统日志列表",level = 3,operationUnit = OperationUnit.ROLE,operationType = OperationType.SELECT)
public ResponseResult list(@RequestParam("page") Integer page,
@RequestParam("size") Integer size) {
PageUtils data = systemLogService.queryPage(page, size);
return new ResponseResult<PageUtils>().SUCCESS(data);
}
@GetMapping("/loginLogList")
@Log(detail = "登录日志列表",level = 3,operationUnit = OperationUnit.ROLE,operationType = OperationType.SELECT)
public ResponseResult loginLogList(@RequestParam("page") Integer page,
@RequestParam("size") Integer size, UserLoginLogRequest userLoginLogRequest) {
PageUtils data = loginLogService.queryPage(page, size,userLoginLogRequest);
return new ResponseResult<PageUtils>().SUCCESS(data);
}
}

@ -3,6 +3,7 @@ package com.daqing.financial.hrauth.controller;
import com.daqing.financial.hrauth.UserLoginControllerApi; import com.daqing.financial.hrauth.UserLoginControllerApi;
import com.daqing.financial.hrauth.service.UserLoginService; import com.daqing.financial.hrauth.service.UserLoginService;
import com.daqing.framework.domain.hrms.request.LoginRequest; import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest; import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.model.response.ResponseResult; import com.daqing.framework.model.response.ResponseResult;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -68,4 +69,11 @@ public class UserLoginController implements UserLoginControllerApi {
loginRequest.setPhone(phone);*/ loginRequest.setPhone(phone);*/
return userLoginService.login(loginRequest); return userLoginService.login(loginRequest);
} }
@PostMapping("/updatePwd")
@ApiOperation(value = "修改平台超管员密码")
public ResponseResult updatePwd(@RequestBody @Valid UpdatePwdRequest user){
boolean result = userLoginService.updatePwd(user);
return result ? ResponseResult.SUCCESS() : ResponseResult.FAIL();
}
} }

@ -1,9 +1,15 @@
package com.daqing.financial.hrauth.dao; package com.daqing.financial.hrauth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.daqing.framework.domain.hrms.LoginLog; import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.request.UserLoginLogRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface LoginLogMapper extends BaseMapper<LoginLog> { public interface LoginLogMapper extends BaseMapper<LoginLog> {
IPage<LoginLog> pageByCondition(Page page,@Param("loginLog") UserLoginLogRequest userLoginLogRequest);
} }

@ -2,17 +2,19 @@ package com.daqing.financial.hrauth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.daqing.framework.domain.hrms.SystemLog; import com.daqing.framework.domain.hrms.SystemLog;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
* @ClassName UserActionMapper * @ClassName SystemLogMapper
* @Description 用户动作记录 * @Description 用户动作记录
* @Author Rogers * @Date 2020/9/30
* @Date 2020/7/3 22:08
* @Version 1.0 * @Version 1.0
*/ */
@Mapper @Mapper
public interface SystemLogMapper extends BaseMapper<SystemLog> { public interface SystemLogMapper extends BaseMapper<SystemLog> {
IPage<SystemLog> pageByCondition(Page page);
} }

@ -2,6 +2,10 @@ package com.daqing.financial.hrauth.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.daqing.framework.domain.hrms.LoginLog; import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.request.UserLoginLogRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.utils.PageUtils;
public interface LoginLogService extends IService<LoginLog> { public interface LoginLogService extends IService<LoginLog> {
PageUtils queryPage(Integer page, Integer size, UserLoginLogRequest userLoginLogRequest);
} }

@ -0,0 +1,11 @@
package com.daqing.financial.hrauth.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.daqing.framework.domain.hrms.EmployeeEntity;
import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.SystemLog;
import com.daqing.framework.utils.PageUtils;
public interface SystemLogService extends IService<SystemLog> {
PageUtils queryPage(Integer page, Integer size);
}

@ -3,6 +3,7 @@ package com.daqing.financial.hrauth.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.daqing.framework.domain.hrms.UserEntity; import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.domain.hrms.request.LoginRequest; import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest; import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.model.response.ResponseResult; import com.daqing.framework.model.response.ResponseResult;
@ -16,4 +17,6 @@ public interface UserLoginService extends IService<UserEntity> {
//登录 //登录
ResponseResult login(LoginRequest loginRequest); ResponseResult login(LoginRequest loginRequest);
Boolean updatePwd(UpdatePwdRequest user);
} }

@ -1,11 +1,30 @@
package com.daqing.financial.hrauth.service.impl; package com.daqing.financial.hrauth.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.daqing.financial.hrauth.dao.LoginLogMapper; import com.daqing.financial.hrauth.dao.LoginLogMapper;
import com.daqing.financial.hrauth.service.LoginLogService; import com.daqing.financial.hrauth.service.LoginLogService;
import com.daqing.framework.domain.hrms.LoginLog; import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.SystemLog;
import com.daqing.framework.domain.hrms.request.UserLoginLogRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.utils.PageUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class LoginLogServiceImpl extends ServiceImpl<LoginLogMapper, LoginLog> implements LoginLogService { public class LoginLogServiceImpl extends ServiceImpl<LoginLogMapper, LoginLog> implements LoginLogService {
@Override
public PageUtils queryPage(Integer page, Integer size, UserLoginLogRequest userLoginLogRequest) {
//分页参数
if (page <= 0) {
page = 1;
}
if (size <= 0) {
size = 10;
}
IPage<LoginLog> loginLogVo = this.getBaseMapper().pageByCondition(new Page(page, size),userLoginLogRequest);
return new PageUtils(loginLogVo);
}
} }

@ -0,0 +1,32 @@
package com.daqing.financial.hrauth.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.daqing.financial.hrauth.dao.LoginLogMapper;
import com.daqing.financial.hrauth.dao.SystemLogMapper;
import com.daqing.financial.hrauth.service.LoginLogService;
import com.daqing.financial.hrauth.service.SystemLogService;
import com.daqing.framework.domain.hrms.EmployeeEntity;
import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.SystemLog;
import com.daqing.framework.domain.hrms.ext.EmployeeVO;
import com.daqing.framework.utils.PageUtils;
import org.springframework.stereotype.Service;
@Service
public class SystemLogServiceImpl extends ServiceImpl<SystemLogMapper, SystemLog> implements SystemLogService {
@Override
public PageUtils queryPage(Integer page, Integer size) {
//分页参数
if (page <= 0) {
page = 1;
}
if (size <= 0) {
size = 10;
}
IPage<SystemLog> systemLogVo = this.getBaseMapper().pageByCondition(new Page(page, size));
return new PageUtils(systemLogVo);
}
}

@ -10,6 +10,7 @@ import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.Token; import com.daqing.framework.domain.hrms.Token;
import com.daqing.framework.domain.hrms.UserEntity; import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.domain.hrms.request.LoginRequest; import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest; import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.domain.hrms.response.HrmsCode; import com.daqing.framework.domain.hrms.response.HrmsCode;
import com.daqing.framework.domain.hrms.response.LoginResponse; import com.daqing.framework.domain.hrms.response.LoginResponse;
@ -18,6 +19,7 @@ import com.daqing.framework.model.response.CommonCode;
import com.daqing.framework.model.response.ResponseResult; import com.daqing.framework.model.response.ResponseResult;
import com.daqing.framework.util.JwtUtils; import com.daqing.framework.util.JwtUtils;
import com.daqing.framework.util.Md5Util; import com.daqing.framework.util.Md5Util;
import com.daqing.framework.util.RedisUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -61,14 +63,6 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
*/ */
@Override @Override
public UserLoginRequest verifyMobile(UserLoginRequest user){ public UserLoginRequest verifyMobile(UserLoginRequest user){
//判断重置密码参数是否为空
if(StringUtils.isEmpty(user.getPhoneAccount())){
ExceptionCast.cast(HrmsCode.PHNOE_ACCOUNT_NOT_EMPTY);
}
if(StringUtils.isEmpty(user.getVerifyCode())){
ExceptionCast.cast(HrmsCode.VERIFY_CODE_ILLEGAL);
}
//校验手机账号是否存在 //校验手机账号是否存在
/* int count = this.count(new QueryWrapper<UserEntity>() /* int count = this.count(new QueryWrapper<UserEntity>()
.eq("phone_account", user.getPhoneAccount()));*/ .eq("phone_account", user.getPhoneAccount()));*/
@ -91,13 +85,6 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
*/ */
@Override @Override
public Boolean getBackPwd(UserLoginRequest user){ public Boolean getBackPwd(UserLoginRequest user){
//判断重置密码参数是否为空
if(StringUtils.isEmpty(user.getNewPwd())){
ExceptionCast.cast(HrmsCode.NEW_PASSWORD_NOT_EMPTY);
}
if(StringUtils.isEmpty(user.getConfirmPwd())){
ExceptionCast.cast(HrmsCode.CONFIRM_PWD_NOT_EMPTY);
}
if(!user.getConfirmPwd().equals(user.getNewPwd())){ if(!user.getConfirmPwd().equals(user.getNewPwd())){
ExceptionCast.cast(HrmsCode.TWICE_PWD_DIFFERENT); ExceptionCast.cast(HrmsCode.TWICE_PWD_DIFFERENT);
} }
@ -120,6 +107,10 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
public ResponseResult login(LoginRequest loginRequest) { public ResponseResult login(LoginRequest loginRequest) {
//判断用户登录方式 //判断用户登录方式
UserEntity userEntity = baseMapper.login(loginRequest); UserEntity userEntity = baseMapper.login(loginRequest);
if(userEntity != null){
//删除redis里面的userEntity
JwtUtils.removeUserEntityByUserId(userEntity.getId());
}
if(loginRequest.getType() == 1){//手机号码登录 if(loginRequest.getType() == 1){//手机号码登录
if(userEntity == null){ if(userEntity == null){
@ -134,9 +125,9 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
} }
//登录成功,token生成 //登录成功,token生成
long times = 84600; long times = 8460000;
if(loginRequest.getTenDayEffective() == 1){ if(loginRequest.getTenDayEffective() == 1){
times = 846000; times = 846000000;
} }
String token = JwtUtils.createJWT(userEntity.getId()+"","token", times); String token = JwtUtils.createJWT(userEntity.getId()+"","token", times);
Token userToken = tokenService.getOne(new QueryWrapper<Token>().eq("user_id", userEntity.getId())); Token userToken = tokenService.getOne(new QueryWrapper<Token>().eq("user_id", userEntity.getId()));
@ -156,6 +147,8 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
} }
//设置最新的token到redis //设置最新的token到redis
JwtUtils.putTokenToRedis(userEntity.getId(), token, times); JwtUtils.putTokenToRedis(userEntity.getId(), token, times);
//设置userEntity到redis
JwtUtils.putUserEntityToRedis(userEntity.getId(),userEntity,times);
//新增登录日志 //新增登录日志
LoginLog loginLog = loginLogService.getOne(new QueryWrapper<LoginLog>().eq("user_id", userEntity.getId())); LoginLog loginLog = loginLogService.getOne(new QueryWrapper<LoginLog>().eq("user_id", userEntity.getId()));
@ -179,4 +172,40 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
return ResponseResult.SUCCESS(loginResponse); return ResponseResult.SUCCESS(loginResponse);
} }
/**
* 修改平台超管员密码
*/
@Override
public Boolean updatePwd(UpdatePwdRequest user){
if(!user.getConfirmPwd().equals(user.getNewPwd())){
ExceptionCast.cast(HrmsCode.TWICE_PWD_DIFFERENT);
}
//根据手机号查询相关信息
UserEntity userEntity = baseMapper.selectByPhoneAccount(user.getPhoneAccount());
if(userEntity == null){
ExceptionCast.cast(HrmsCode.PHNOE_ACCOUNT_NOT_EXIST);
}
//新密码不能与账号相同
if(user.getNewPwd().equals(userEntity.getAccount())){
ExceptionCast.cast(HrmsCode.NEW_PASSWORD_DIFFERENT);
}
//检测当前密码是否输入正确
if(!Md5Util.md5(user.getPassword()+userEntity.getId()).equals(userEntity.getPassword())){
ExceptionCast.cast(HrmsCode.PASSWORD_ERROR);
}
//新密码不能与当前密码保持一致
if(Md5Util.md5(user.getNewPwd()+userEntity.getId()).equals(userEntity.getPassword())){
ExceptionCast.cast(HrmsCode.NEWPWD_PASSWORD_SAME);
}
String newMD5 = Md5Util.md5(user.getNewPwd()+userEntity.getId());
//根据手机号码修改密码
int i = userLoginDao.updatePasswordByPhoneAccount(user.getPhoneAccount(),newMD5);
return i > 0;
}
} }

@ -8,8 +8,7 @@ import java.util.Enumeration;
/** /**
* @ClassName IpUtils * @ClassName IpUtils
* @Description Ip工具类获取ip * @Description Ip工具类获取ip
* @Author Rogers * @Date 2020/9/30
* @Date 2020/7/4 14:36
* @Version 1.0 * @Version 1.0
*/ */
public class IpUtils { public class IpUtils {

@ -18,9 +18,9 @@ spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true spring.cloud.nacos.config.ext-config[2].refresh=true
spring.redis.host=192.168.232.128 spring.redis.host=127.0.0.1
spring.redis.port=6379 spring.redis.port=6379
spring.redis.password= spring.redis.password=123456
spring.redis.database=0 spring.redis.database=0
spring.redis.timeout=30000 spring.redis.timeout=30000
spring.redis.jedis.pool.max-active=8 spring.redis.jedis.pool.max-active=8

@ -0,0 +1,39 @@
<?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.daqing.financial.hrauth.dao.LoginLogMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.daqing.framework.domain.hrms.LoginLog" id="LoginLogMap">
<result property="id" column="id"/>
</resultMap>
<resultMap type="com.daqing.framework.domain.hrms.LoginLogEntity" id="userLoginLogMap">
<result property="id" column="id"/>
</resultMap>
<select id="pageByCondition" parameterType="com.daqing.framework.domain.hrms.request.UserLoginLogRequest" resultMap="userLoginLogMap">
SELECT
hll.user_id,hll.login_num,hll.create_time,hll.newest_time,he.name as empName,he.job_number,
he.phone,hp.name as posName,hd.name as deptName
FROM hrms_login_log hll
left join hrms_employee he on he.user_id=hll.user_id
left join hrms_employee_position hep on hep.emp_id=he.id
left join hrms_position hp on hp.id=hep.position_id
left join hrms_employee_dept hed on hed.employee_id=he.id
left join hrms_dept hd on hd.id=hed.dept_id
<where>
<if test="loginLog.name != null and loginLog.name != ''">
AND he.`name` LIKE CONCAT('%',#{loginLog.name},'%')
</if>
<if test="loginLog.jobNumber != null and loginLog.jobNumber != ''">
AND he.job_number = #{loginLog.jobNumber}
</if>
<if test="loginLog.startTime != null and loginLog.startTime != '' ">
AND hll.create_time &gt;= #{loginLog.startTime}
</if>
<if test="loginLog.endTime != null and loginLog.endTime != '' ">
AND hll.create_time &lt;= #{loginLog.endTime}
</if>
</where>
</select>
</mapper>

@ -0,0 +1,16 @@
<?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.daqing.financial.hrauth.dao.SystemLogMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.daqing.framework.domain.hrms.SystemLog" id="SystemLogMap">
<result property="id" column="id"/>
</resultMap>
<select id="pageByCondition" resultMap="SystemLogMap">
SELECT *
FROM
sys_action_log
</select>
</mapper>

@ -35,7 +35,7 @@
</select> </select>
<select id="selectByPhoneAccount" resultType="com.daqing.framework.domain.hrms.UserEntity"> <select id="selectByPhoneAccount" resultType="com.daqing.framework.domain.hrms.UserEntity">
SELECT id,account FROM hrms_user WHERE phone_account = #{phoneAccount} SELECT id,account,password FROM hrms_user WHERE phone_account = #{phoneAccount}
</select> </select>
</mapper> </mapper>

@ -1,33 +1,33 @@
package com.daqing.financial.hrms.config; //package com.daqing.financial.hrms.config;
//
import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration; //import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; //import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; //import org.springframework.web.filter.CorsFilter;
//
/** ///**
* 实现基本的跨域请求 // * 实现基本的跨域请求
* // *
* @auther River // * @auther River
* @date 2020/9/25 15:09 // * @date 2020/9/25 15:09
*/ // */
@Configuration //@Configuration
public class CorsConfig { //public class CorsConfig {
//
@Bean // @Bean
public CorsFilter corsFilter() { // public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); // final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration(); // final CorsConfiguration corsConfiguration = new CorsConfiguration();
/*是否允许请求带有验证信息*/ // /*是否允许请求带有验证信息*/
corsConfiguration.setAllowCredentials(true); // corsConfiguration.setAllowCredentials(true);
/*允许访问的客户端域名*/ // /*允许访问的客户端域名*/
corsConfiguration.addAllowedOrigin("*"); // corsConfiguration.addAllowedOrigin("*");
/*允许服务端访问的客户端请求头*/ // /*允许服务端访问的客户端请求头*/
corsConfiguration.addAllowedHeader("*"); // corsConfiguration.addAllowedHeader("*");
/*允许访问的方法名,GET POST等*/ // /*允许访问的方法名,GET POST等*/
corsConfiguration.addAllowedMethod("*"); // corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); // urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource); // return new CorsFilter(urlBasedCorsConfigurationSource);
} // }
} //}

@ -17,12 +17,12 @@ spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true spring.cloud.nacos.config.ext-config[2].refresh=true
#spring.redis.host=127.0.0.1 spring.redis.host=127.0.0.1
#spring.redis.port=6379 spring.redis.port=6379
#spring.redis.password=123456 spring.redis.password=123456
#spring.redis.database=0 spring.redis.database=0
#spring.redis.timeout=30000 spring.redis.timeout=30000
#spring.redis.jedis.pool.max-active=8 spring.redis.jedis.pool.max-active=8
#spring.redis.jedis.pool.max-wait=-1 spring.redis.jedis.pool.max-wait=-1
#spring.redis.jedis.pool.max-idle=8 spring.redis.jedis.pool.max-idle=8
#spring.redis.jedis.pool.min-idle=0 spring.redis.jedis.pool.min-idle=0

@ -1,6 +1,7 @@
package com.daqing.framework.util; package com.daqing.framework.util;
import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.JwtBuilder;
@ -91,6 +92,14 @@ public class JwtUtils {
RedisUtil.setEx("dq:token:"+token, String.valueOf(userId), times); RedisUtil.setEx("dq:token:"+token, String.valueOf(userId), times);
} }
public static <UserEntity> void putUserEntityToRedis(Long userId, UserEntity userEntity, long times) {
RedisUtil.setEx("dq:userId:"+userId, JSONObject.toJSONString(userEntity), times);
}
public static void removeUserEntityByUserId(Long userId) {
RedisUtil.del("dq:userId:"+userId);
}
public static void removeTokenByToken(String token) { public static void removeTokenByToken(String token) {
RedisUtil.del("dq:token:"+token); RedisUtil.del("dq:token:"+token);
} }

@ -0,0 +1,44 @@
package com.daqing.framework.domain.hrms;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("hrms_login_log")
public class LoginLogEntity {
@TableId(type = IdType.AUTO)
private int id;
//用户id
private Long userId;
//登录次数
private int loginNum;
//创建时间
private Date createTime;
//最新登录时间
private Date newestTime;
//员工姓名
private String empName;
//工号
private String jobNumber;
//联系电话
private String phone;
//职位
private String posName;
//部门名称
private String deptName;
}

@ -0,0 +1,40 @@
package com.daqing.framework.domain.hrms.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
/**
* 修改平台超管员密码请求体对象
*
* @author gongsj
* @email gongsj@gmail.com
* @date 2020-09-07 17:12:14
*/
@Data
public class UpdatePwdRequest implements Serializable {
/**
* 手机账号
*/
@Pattern(regexp = "^1(3([0-35-9]\\d|4[1-8])|4[14-9]\\d|5([0125689]\\d|7[1-79])|66\\d|7[2-35-8]\\d|8\\d{2}|9[13589]\\d)\\d{7}$",message = "手机号格式不正确!")
private String phoneAccount;
/**
* 新密码
*/
@Pattern(regexp = "^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*).{6,20}$",message = "密码格式不正确!")
private String newPwd;
/**
* 确认密码
*/
private String confirmPwd;
/**
* 原密码
*/
@NotBlank(message = "当前密码不能为空!")
private String password;
}

@ -0,0 +1,32 @@
package com.daqing.framework.domain.hrms.request;
import lombok.Data;
import java.io.Serializable;
/**
* 登录日志请求体对象
*
* @author gongsj
* @email gongsj@gmail.com
* @date 2020-09-07 17:12:14
*/
@Data
public class UserLoginLogRequest implements Serializable {
/**
* 姓名
*/
private String name;
/**
* 工号
*/
private String jobNumber;
/**
* 开始时间
*/
private String startTime;
/**
* 结束时间
*/
private String endTime;
}

@ -2,6 +2,7 @@ package com.daqing.framework.domain.hrms.request;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import java.io.Serializable; import java.io.Serializable;
@ -18,20 +19,24 @@ public class UserLoginRequest implements Serializable {
/** /**
* 手机账号 * 手机账号
*/ */
@NotBlank(message = "手机号码不能为空!")
@Pattern(regexp = "^1(3([0-35-9]\\d|4[1-8])|4[14-9]\\d|5([0125689]\\d|7[1-79])|66\\d|7[2-35-8]\\d|8\\d{2}|9[13589]\\d)\\d{7}$",message = "手机号格式不正确!") @Pattern(regexp = "^1(3([0-35-9]\\d|4[1-8])|4[14-9]\\d|5([0125689]\\d|7[1-79])|66\\d|7[2-35-8]\\d|8\\d{2}|9[13589]\\d)\\d{7}$",message = "手机号格式不正确!")
private String phoneAccount; private String phoneAccount;
/** /**
* 验证码 * 验证码
*/ */
@NotBlank(message = "验证码不能为空!")
private String verifyCode; private String verifyCode;
/** /**
* 新密码 * 新密码
*/ */
@Pattern(regexp = "^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*).{6,20}$",message = "密码格式不正确!") @Pattern(regexp = "^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*).{6,20}$",message = "密码格式不正确!")
@NotBlank(message = "新密码不能为空!")
private String newPwd; private String newPwd;
/** /**
* 确认密码 * 确认密码
*/ */
@NotBlank(message = "确认密码不能为空!")
private String confirmPwd; private String confirmPwd;
} }

@ -30,6 +30,8 @@ public enum HrmsCode implements ResultCode {
CONFIRM_PWD_NOT_EMPTY(false,33007,"确认密码不能为空!"), CONFIRM_PWD_NOT_EMPTY(false,33007,"确认密码不能为空!"),
TWICE_PWD_DIFFERENT(false,33008,"两次输入密码不一致!"), TWICE_PWD_DIFFERENT(false,33008,"两次输入密码不一致!"),
NEW_PASSWORD_DIFFERENT(false,33008,"输入的新密码不能与账号相同!"), NEW_PASSWORD_DIFFERENT(false,33008,"输入的新密码不能与账号相同!"),
PASSWORD_ERROR(false,33009,"当前密码输入不正确!"),
NEWPWD_PASSWORD_SAME(false,33010,"新密码不能与当前密码一致!"),
EMP_POSITION_EXSIT(false, 22006, "该职位下已关联员工!"); EMP_POSITION_EXSIT(false, 22006, "该职位下已关联员工!");

@ -14,6 +14,9 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;

@ -1,5 +1,9 @@
package com.daqing.financial.gateway.config; package com.daqing.financial.gateway.config;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator;
import org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties;
import org.springframework.cloud.gateway.route.RouteDefinitionLocator;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
@ -24,4 +28,9 @@ public class FinancialCorsConfiguration {
source.registerCorsConfiguration("/**",corsConfiguration); source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source); return new CorsWebFilter(source);
} }
@Bean
public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient,
DiscoveryLocatorProperties properties) {
return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);
}
} }

@ -1,4 +1,7 @@
jwt.ignoreUrlList=/apiHrmsAuth/hrms/auth/userlogin/getBackPwd,\ jwt.ignoreUrlList=/apiHrmsAuth/hrms/auth/userlogin/getBackPwd,\
/apiHrmsAuth/hrms/auth/userlogin/login,\ /apiHrmsAuth/hrms/auth/userlogin/login,\
/apiHrmsAuth/hrms/auth/userlogin/verifyMobile,\ /apiHrmsAuth/hrms/auth/userlogin/verifyMobile,\
/api-crms/sweagger-ui.html /api-crms/sweagger-ui.html,\
/api-crms/crms/customer/excelTemplate,\
/api-crms/crms/customer/excelExport,\
/api-crms/crms/customer/excelImport
Loading…
Cancel
Save