完成 oauth2.0 的逻辑
This commit is contained in:
parent
dfd1360b28
commit
20d8db6ce8
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.common.framework.constant;
|
package cn.iocoder.common.framework.enums;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.core.IntArrayValuable;
|
import cn.iocoder.common.framework.core.IntArrayValuable;
|
||||||
|
|
||||||
@ -17,11 +17,11 @@ public enum CommonStatusEnum implements IntArrayValuable {
|
|||||||
/**
|
/**
|
||||||
* 状态值
|
* 状态值
|
||||||
*/
|
*/
|
||||||
private Integer value;
|
private final Integer value;
|
||||||
/**
|
/**
|
||||||
* 状态名
|
* 状态名
|
||||||
*/
|
*/
|
||||||
private String name;
|
private final String name;
|
||||||
|
|
||||||
CommonStatusEnum(Integer value, String name) {
|
CommonStatusEnum(Integer value, String name) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
@ -32,29 +32,10 @@ public enum CommonStatusEnum implements IntArrayValuable {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommonStatusEnum setValue(Integer value) {
|
|
||||||
this.value = value;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommonStatusEnum setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static boolean isValid(Integer status) {
|
|
||||||
if (status == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return ENABLE.value.equals(status)
|
|
||||||
|| DISABLE.value.equals(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] array() {
|
public int[] array() {
|
||||||
return ARRAYS;
|
return ARRAYS;
|
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.common.framework.constant;
|
package cn.iocoder.common.framework.enums;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mall 全局枚举
|
* Mall 全局枚举
|
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.common.framework.constant;
|
package cn.iocoder.common.framework.enums;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模块错误码区间
|
* 模块错误码区间
|
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.common.framework.constant;
|
package cn.iocoder.common.framework.enums;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 错误码枚举类
|
* 错误码枚举类
|
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.common.framework.constant;
|
package cn.iocoder.common.framework.enums;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.core.IntArrayValuable;
|
import cn.iocoder.common.framework.core.IntArrayValuable;
|
||||||
|
|
||||||
@ -17,11 +17,11 @@ public enum UserTypeEnum implements IntArrayValuable {
|
|||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
private Integer value;
|
private final Integer value;
|
||||||
/**
|
/**
|
||||||
* 类型名
|
* 类型名
|
||||||
*/
|
*/
|
||||||
private String name;
|
private final String name;
|
||||||
|
|
||||||
UserTypeEnum(Integer value, String name) {
|
UserTypeEnum(Integer value, String name) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
@ -32,20 +32,10 @@ public enum UserTypeEnum implements IntArrayValuable {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserTypeEnum setValue(Integer value) {
|
|
||||||
this.value = value;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserTypeEnum setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] array() {
|
public int[] array() {
|
||||||
return ARRAYS;
|
return ARRAYS;
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.common.framework.util;
|
package cn.iocoder.common.framework.util;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
|
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.web.core.handler;
|
package cn.iocoder.mall.web.core.handler;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
|
import cn.iocoder.common.framework.enums.SysErrorCodeEnum;
|
||||||
import cn.iocoder.common.framework.exception.ServiceException;
|
import cn.iocoder.common.framework.exception.ServiceException;
|
||||||
import cn.iocoder.common.framework.util.ExceptionUtil;
|
import cn.iocoder.common.framework.util.ExceptionUtil;
|
||||||
import cn.iocoder.common.framework.util.HttpUtil;
|
import cn.iocoder.common.framework.util.HttpUtil;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.demo.business.service;
|
package cn.iocoder.mall.demo.business.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.demo.business.api.DemoOrderService;
|
import cn.iocoder.mall.demo.business.api.DemoOrderService;
|
||||||
import cn.iocoder.mall.demo.business.api.DemoProductService;
|
import cn.iocoder.mall.demo.business.api.DemoProductService;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.biz.enums.order;
|
package cn.iocoder.mall.order.biz.enums.order;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.ModuleErrorCodeInterval;
|
import cn.iocoder.common.framework.enums.ModuleErrorCodeInterval;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 错误码区间
|
* 错误码区间
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.rest.controller.comment;
|
package cn.iocoder.mall.order.rest.controller.comment;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.rest.controller.comment;
|
package cn.iocoder.mall.order.rest.controller.comment;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentPageDTO;
|
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentPageDTO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.api.constant;
|
package cn.iocoder.mall.order.api.constant;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.ModuleErrorCodeInterval;
|
import cn.iocoder.common.framework.enums.ModuleErrorCodeInterval;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 错误码区间
|
* 错误码区间
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.biz.service;
|
package cn.iocoder.mall.order.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.order.api.CartService;
|
import cn.iocoder.mall.order.api.CartService;
|
||||||
import cn.iocoder.mall.order.api.bo.CalcOrderPriceBO;
|
import cn.iocoder.mall.order.api.bo.CalcOrderPriceBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.biz.service;
|
package cn.iocoder.mall.order.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.DateUtil;
|
import cn.iocoder.common.framework.util.DateUtil;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.biz.service;
|
package cn.iocoder.mall.order.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.system.api.DataDictService;
|
import cn.iocoder.mall.system.api.DataDictService;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.order.biz.service;
|
package cn.iocoder.mall.order.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.DateUtil;
|
import cn.iocoder.common.framework.util.DateUtil;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.pay.biz.service;
|
package cn.iocoder.mall.pay.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.pay.api.constant.PayErrorCodeEnum;
|
import cn.iocoder.mall.pay.api.constant.PayErrorCodeEnum;
|
||||||
import cn.iocoder.mall.pay.biz.dao.PayAppMapper;
|
import cn.iocoder.mall.pay.biz.dao.PayAppMapper;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.product.biz.service.attr;
|
package cn.iocoder.mall.product.biz.service.attr;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO;
|
import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.product.rest.controller.category;
|
package cn.iocoder.mall.product.rest.controller.category;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO;
|
import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO;
|
||||||
import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO;
|
import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.product.api;
|
package cn.iocoder.mall.product.api;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.mall.product.api.bo.ProductAttrBO;
|
import cn.iocoder.mall.product.api.bo.ProductAttrBO;
|
||||||
import cn.iocoder.mall.product.api.bo.ProductAttrPageBO;
|
import cn.iocoder.mall.product.api.bo.ProductAttrPageBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.product.api;
|
package cn.iocoder.mall.product.api;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.mall.product.api.bo.ProductCategoryBO;
|
import cn.iocoder.mall.product.api.bo.ProductCategoryBO;
|
||||||
import cn.iocoder.mall.product.api.dto.ProductCategoryAddDTO;
|
import cn.iocoder.mall.product.api.dto.ProductCategoryAddDTO;
|
||||||
|
@ -34,7 +34,7 @@ public class BannerDO extends DeletableDO {
|
|||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*
|
*
|
||||||
* {@link cn.iocoder.common.framework.constant.CommonStatusEnum}
|
* {@link cn.iocoder.common.framework.enums.CommonStatusEnum}
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.biz.service.banner;
|
package cn.iocoder.mall.promotion.biz.service.banner;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.promotion.biz.bo.banner.BannerListBO;
|
import cn.iocoder.mall.promotion.biz.bo.banner.BannerListBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.biz.service.banner;
|
package cn.iocoder.mall.promotion.biz.service.banner;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.api;
|
package cn.iocoder.mall.promotion.api;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.mall.promotion.api.bo.BannerBO;
|
import cn.iocoder.mall.promotion.api.bo.BannerBO;
|
||||||
import cn.iocoder.mall.promotion.api.bo.BannerPageBO;
|
import cn.iocoder.mall.promotion.api.bo.BannerPageBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.api;
|
package cn.iocoder.mall.promotion.api;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.exception.ServiceException;
|
import cn.iocoder.common.framework.exception.ServiceException;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.mall.promotion.api.bo.ProductRecommendBO;
|
import cn.iocoder.mall.promotion.api.bo.ProductRecommendBO;
|
||||||
|
@ -35,7 +35,7 @@ public class ProductRecommendBO implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*
|
*
|
||||||
* {@link cn.iocoder.common.framework.constant.CommonStatusEnum}
|
* {@link cn.iocoder.common.framework.enums.CommonStatusEnum}
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
/**
|
/**
|
||||||
|
@ -34,7 +34,7 @@ public class BannerDO extends DeletableDO {
|
|||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*
|
*
|
||||||
* {@link cn.iocoder.common.framework.constant.CommonStatusEnum}
|
* {@link cn.iocoder.common.framework.enums.CommonStatusEnum}
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
/**
|
/**
|
||||||
|
@ -35,7 +35,7 @@ public class ProductRecommendDO extends DeletableDO {
|
|||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*
|
*
|
||||||
* {@link cn.iocoder.common.framework.constant.CommonStatusEnum}
|
* {@link cn.iocoder.common.framework.enums.CommonStatusEnum}
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.biz.service;
|
package cn.iocoder.mall.promotion.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.mall.promotion.api.BannerService;
|
import cn.iocoder.mall.promotion.api.BannerService;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.biz.service;
|
package cn.iocoder.mall.promotion.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
|
import cn.iocoder.common.framework.enums.SysErrorCodeEnum;
|
||||||
import cn.iocoder.common.framework.util.DateUtil;
|
import cn.iocoder.common.framework.util.DateUtil;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.util.StringUtil;
|
import cn.iocoder.common.framework.util.StringUtil;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.biz.service;
|
package cn.iocoder.mall.promotion.biz.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.mall.product.rpc.api.ProductSpuRpc;
|
import cn.iocoder.mall.product.rpc.api.ProductSpuRpc;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.application.controller.users;
|
package cn.iocoder.mall.promotion.application.controller.users;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.promotion.api.BannerService;
|
import cn.iocoder.mall.promotion.api.BannerService;
|
||||||
import cn.iocoder.mall.promotion.api.bo.BannerBO;
|
import cn.iocoder.mall.promotion.api.bo.BannerBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.promotion.application.controller.users;
|
package cn.iocoder.mall.promotion.application.controller.users;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.product.api.ProductSpuService;
|
import cn.iocoder.mall.product.api.ProductSpuService;
|
||||||
import cn.iocoder.mall.product.api.bo.ProductSpuBO;
|
import cn.iocoder.mall.product.api.bo.ProductSpuBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.search.rest.controller.user;
|
package cn.iocoder.mall.search.rest.controller.user;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.util.StringUtil;
|
import cn.iocoder.common.framework.util.StringUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.SortingField;
|
import cn.iocoder.common.framework.vo.SortingField;
|
||||||
|
@ -1,4 +1,16 @@
|
|||||||
package cn.iocoder.mall.systemservice.rpc.oauth;
|
package cn.iocoder.mall.systemservice.rpc.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2CreateAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2RefreshAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO;
|
||||||
|
|
||||||
public interface OAuth2Rpc {
|
public interface OAuth2Rpc {
|
||||||
|
|
||||||
|
CommonResult<OAuth2AccessTokenVO> createAccessToken(OAuth2CreateAccessTokenDTO createAccessTokenDTO);
|
||||||
|
|
||||||
|
CommonResult<OAuth2AccessTokenVO> checkAccessToken(String accessToken);
|
||||||
|
|
||||||
|
CommonResult<OAuth2AccessTokenVO> refreshAccessToken(OAuth2RefreshAccessTokenDTO refreshAccessTokenDTO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.rpc.oauth.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OAuth2.0 访问令牌创建 DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class OAuth2CreateAccessTokenDTO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*/
|
||||||
|
private Integer userId;
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
*/
|
||||||
|
private Integer userType;
|
||||||
|
/**
|
||||||
|
* 创建 IP
|
||||||
|
*/
|
||||||
|
private String createIp;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.rpc.oauth.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OAuth2.0 访问令牌创建 DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class OAuth2RefreshAccessTokenDTO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 刷新令牌
|
||||||
|
*/
|
||||||
|
private String refreshToken;
|
||||||
|
/**
|
||||||
|
* 创建 IP
|
||||||
|
*/
|
||||||
|
private String createIp;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.rpc.oauth.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OAuth2.0 访问令牌 VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class OAuth2AccessTokenVO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 访问令牌
|
||||||
|
*/
|
||||||
|
private String accessToken;
|
||||||
|
/**
|
||||||
|
* 刷新令牌
|
||||||
|
*/
|
||||||
|
private String refreshToken;
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*/
|
||||||
|
private Integer userId;
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
*/
|
||||||
|
private Integer userType;
|
||||||
|
/**
|
||||||
|
* 过期时间
|
||||||
|
*/
|
||||||
|
private Date expiresTime;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.convert.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth.OAuth2AccessTokenDO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO;
|
||||||
|
import cn.iocoder.mall.systemservice.service.oauth.bo.OAuth2AccessTokenBO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface OAuth2Convert {
|
||||||
|
|
||||||
|
OAuth2Convert INSTANCE = Mappers.getMapper(OAuth2Convert.class);
|
||||||
|
|
||||||
|
@Mapping(source = "id", target = "accessToken")
|
||||||
|
OAuth2AccessTokenBO convert(OAuth2AccessTokenDO bean);
|
||||||
|
|
||||||
|
OAuth2AccessTokenVO convert(OAuth2AccessTokenBO bean);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.convert;
|
@ -1,7 +1,7 @@
|
|||||||
package cn.iocoder.mall.system.biz.dataobject.oauth2;
|
package cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.enums.UserTypeEnum;
|
||||||
import cn.iocoder.mall.mybatis.dataobject.BaseDO;
|
import cn.iocoder.mall.mybatis.dataobject.BaseDO;
|
||||||
import cn.iocoder.mall.system.biz.dataobject.account.AccountDO;
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
@ -13,6 +13,9 @@ import java.util.Date;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* OAuth2 访问令牌
|
* OAuth2 访问令牌
|
||||||
|
*
|
||||||
|
* idx_userId 索引:对应 {@link #userId} 字段
|
||||||
|
* idx_refreshToken 索引:对应 {@link #refreshToken} 字段
|
||||||
*/
|
*/
|
||||||
@TableName("oauth2_access_token")
|
@TableName("oauth2_access_token")
|
||||||
@Data
|
@Data
|
||||||
@ -25,25 +28,29 @@ public class OAuth2AccessTokenDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableId(type = IdType.INPUT)
|
@TableId(type = IdType.INPUT)
|
||||||
private String id;
|
private String id;
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*/
|
||||||
|
private Integer userId;
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
*
|
||||||
|
* 枚举 {@link UserTypeEnum}
|
||||||
|
*/
|
||||||
|
private Integer userType;
|
||||||
/**
|
/**
|
||||||
* 刷新令牌
|
* 刷新令牌
|
||||||
*
|
*
|
||||||
* 关联 {@link OAuth2RefreshTokenDO#getId()}
|
* 关联 {@link OAuth2RefreshTokenDO#getId()}
|
||||||
*/
|
*/
|
||||||
private String refreshToken;
|
private String refreshToken;
|
||||||
/**
|
|
||||||
* 账号编号
|
|
||||||
*
|
|
||||||
* 关联 {@link AccountDO#getId()}
|
|
||||||
*/
|
|
||||||
private Integer accountId;
|
|
||||||
/**
|
/**
|
||||||
* 过期时间
|
* 过期时间
|
||||||
*/
|
*/
|
||||||
private Date expiresTime;
|
private Date expiresTime;
|
||||||
/**
|
/**
|
||||||
* 是否有效
|
* 创建 IP
|
||||||
*/
|
*/
|
||||||
private Boolean valid;
|
private String createIp;
|
||||||
|
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package cn.iocoder.mall.system.biz.dataobject.oauth2;
|
package cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth;
|
||||||
|
|
||||||
import cn.iocoder.mall.mybatis.dataobject.BaseDO;
|
import cn.iocoder.common.framework.enums.UserTypeEnum;
|
||||||
import cn.iocoder.mall.system.biz.dataobject.account.AccountDO;
|
import cn.iocoder.mall.mybatis.dataobject.DeletableDO;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
@ -14,13 +14,13 @@ import java.util.Date;
|
|||||||
/**
|
/**
|
||||||
* OAuth2 刷新令牌
|
* OAuth2 刷新令牌
|
||||||
*
|
*
|
||||||
* idx_uid
|
* idx_userId 索引:对应 {@link #userId} 字段
|
||||||
*/
|
*/
|
||||||
@TableName("oauth2_refresh_token")
|
@TableName("oauth2_refresh_token")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public class OAuth2RefreshTokenDO extends BaseDO {
|
public class OAuth2RefreshTokenDO extends DeletableDO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 刷新令牌
|
* 刷新令牌
|
||||||
@ -28,18 +28,22 @@ public class OAuth2RefreshTokenDO extends BaseDO {
|
|||||||
@TableId(type = IdType.INPUT)
|
@TableId(type = IdType.INPUT)
|
||||||
private String id;
|
private String id;
|
||||||
/**
|
/**
|
||||||
* 账号编号
|
* 用户编号
|
||||||
*
|
|
||||||
* 关联 {@link AccountDO#getId()}
|
|
||||||
*/
|
*/
|
||||||
private Integer accountId;
|
private Integer userId;
|
||||||
/**
|
/**
|
||||||
* 是否有效
|
* 用户类型
|
||||||
|
*
|
||||||
|
* 枚举 {@link UserTypeEnum}
|
||||||
*/
|
*/
|
||||||
private Boolean valid;
|
private Integer userType;
|
||||||
/**
|
/**
|
||||||
* 过期时间
|
* 过期时间
|
||||||
*/
|
*/
|
||||||
private Date expiresTime;
|
private Date expiresTime;
|
||||||
|
/**
|
||||||
|
* 创建 IP
|
||||||
|
*/
|
||||||
|
private String createIp;
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.dal.mysql.dataobject;
|
@ -0,0 +1,20 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.dal.mysql.mapper.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth.OAuth2AccessTokenDO;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface OAuth2AccessTokenMapper extends BaseMapper<OAuth2AccessTokenDO> {
|
||||||
|
|
||||||
|
default int deleteByUserIdAndUserType(Integer userId, Integer userType) {
|
||||||
|
return delete(new QueryWrapper<OAuth2AccessTokenDO>()
|
||||||
|
.eq("user_id", userId).eq("user_type", userType));
|
||||||
|
}
|
||||||
|
|
||||||
|
default int deleteByRefreshToken(String refreshToken) {
|
||||||
|
return delete(new QueryWrapper<OAuth2AccessTokenDO>().eq("refresh_token", refreshToken));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.dal.mysql.mapper.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth.OAuth2RefreshTokenDO;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface OAuth2RefreshTokenMapper extends BaseMapper<OAuth2RefreshTokenDO> {
|
||||||
|
|
||||||
|
default int deleteByUserIdAndUserType(Integer userId, Integer userType) {
|
||||||
|
return delete(new QueryWrapper<OAuth2RefreshTokenDO>()
|
||||||
|
.eq("user_id", userId).eq("user_type", userType));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.dal.mysql.mapper;
|
@ -0,0 +1,38 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.manager.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.mall.systemservice.convert.oauth.OAuth2Convert;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2CreateAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2RefreshAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO;
|
||||||
|
import cn.iocoder.mall.systemservice.service.oauth.OAuth2Service;
|
||||||
|
import cn.iocoder.mall.systemservice.service.oauth.bo.OAuth2AccessTokenBO;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OAuth2.0 Manager
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class OAuth2Manager {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OAuth2Service oauth2Service;
|
||||||
|
|
||||||
|
public OAuth2AccessTokenVO createAccessToken(OAuth2CreateAccessTokenDTO createAccessTokenDTO) {
|
||||||
|
OAuth2AccessTokenBO accessTokenBO = oauth2Service.createAccessToken(createAccessTokenDTO.getUserId(),
|
||||||
|
createAccessTokenDTO.getUserType(), createAccessTokenDTO.getCreateIp());
|
||||||
|
return OAuth2Convert.INSTANCE.convert(accessTokenBO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OAuth2AccessTokenVO checkAccessToken(String accessToken) {
|
||||||
|
OAuth2AccessTokenBO accessTokenBO = oauth2Service.checkAccessToken(accessToken);
|
||||||
|
return OAuth2Convert.INSTANCE.convert(accessTokenBO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OAuth2AccessTokenVO refreshAccessToken(OAuth2RefreshAccessTokenDTO refreshAccessTokenDTO) {
|
||||||
|
OAuth2AccessTokenBO accessTokenBO = oauth2Service.refreshAccessToken(refreshAccessTokenDTO.getRefreshToken(),
|
||||||
|
refreshAccessTokenDTO.getCreateIp());
|
||||||
|
return OAuth2Convert.INSTANCE.convert(accessTokenBO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.manager;
|
@ -1,7 +1,34 @@
|
|||||||
package cn.iocoder.mall.systemservice.rpc.oauth;
|
package cn.iocoder.mall.systemservice.rpc.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.systemservice.manager.oauth.OAuth2Manager;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2CreateAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2RefreshAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO;
|
||||||
import org.apache.dubbo.config.annotation.Service;
|
import org.apache.dubbo.config.annotation.Service;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||||
|
|
||||||
@Service(version = "${dubbo.provider.OAuth2Rpc.version}", validation = "false")
|
@Service(version = "${dubbo.provider.OAuth2Rpc.version}", validation = "false")
|
||||||
public class OAuth2RpcImpl implements OAuth2Rpc {
|
public class OAuth2RpcImpl implements OAuth2Rpc {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OAuth2Manager oauth2Manager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<OAuth2AccessTokenVO> createAccessToken(OAuth2CreateAccessTokenDTO createAccessTokenDTO) {
|
||||||
|
return success(oauth2Manager.createAccessToken(createAccessTokenDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<OAuth2AccessTokenVO> checkAccessToken(String accessToken) {
|
||||||
|
return success(oauth2Manager.checkAccessToken(accessToken));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<OAuth2AccessTokenVO> refreshAccessToken(OAuth2RefreshAccessTokenDTO refreshAccessTokenDTO) {
|
||||||
|
return success(oauth2Manager.refreshAccessToken(refreshAccessTokenDTO));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,112 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.service.oauth;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
|
import cn.iocoder.common.framework.util.StringUtils;
|
||||||
|
import cn.iocoder.mall.systemservice.convert.oauth.OAuth2Convert;
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth.OAuth2AccessTokenDO;
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth.OAuth2RefreshTokenDO;
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.mapper.oauth.OAuth2AccessTokenMapper;
|
||||||
|
import cn.iocoder.mall.systemservice.dal.mysql.mapper.oauth.OAuth2RefreshTokenMapper;
|
||||||
|
import cn.iocoder.mall.systemservice.service.oauth.bo.OAuth2AccessTokenBO;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeEnum.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OAuth2.0 Service
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class OAuth2Service {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 访问令牌过期时间,单位:毫秒
|
||||||
|
*/
|
||||||
|
@Value("${modules.oauth2-service.access-token-expire-time-millis}")
|
||||||
|
private int accessTokenExpireTimeMillis;
|
||||||
|
/**
|
||||||
|
* 刷新令牌过期时间,单位:毫秒
|
||||||
|
*/
|
||||||
|
@Value("${modules.oauth2-service.refresh-token-expire-time-millis}")
|
||||||
|
private int refreshTokenExpireTimeMillis;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OAuth2AccessTokenMapper oauth2AccessTokenMapper;
|
||||||
|
@Autowired
|
||||||
|
private OAuth2RefreshTokenMapper oauth2RefreshTokenMapper;
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public OAuth2AccessTokenBO createAccessToken(Integer userId, Integer userType, String createIp) {
|
||||||
|
// 创建刷新令牌 + 访问令牌
|
||||||
|
OAuth2RefreshTokenDO refreshTokenDO = createOAuth2RefreshToken(userId, userType, createIp);
|
||||||
|
OAuth2AccessTokenDO accessTokenDO = createOAuth2AccessToken(refreshTokenDO, createIp);
|
||||||
|
// 返回访问令牌
|
||||||
|
return OAuth2Convert.INSTANCE.convert(accessTokenDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public OAuth2AccessTokenBO checkAccessToken(String accessToken) {
|
||||||
|
OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenMapper.selectById(accessToken);
|
||||||
|
if (accessTokenDO == null) { // 不存在
|
||||||
|
throw ServiceExceptionUtil.exception(OAUTH2_ACCESS_TOKEN_NOT_FOUND);
|
||||||
|
}
|
||||||
|
if (accessTokenDO.getExpiresTime().getTime() < System.currentTimeMillis()) { // 已过期
|
||||||
|
throw ServiceExceptionUtil.exception(OAUTH2_ACCESS_TOKEN_TOKEN_EXPIRED);
|
||||||
|
}
|
||||||
|
// 返回访问令牌
|
||||||
|
return OAuth2Convert.INSTANCE.convert(accessTokenDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public OAuth2AccessTokenBO refreshAccessToken(String refreshToken, String createIp) {
|
||||||
|
OAuth2RefreshTokenDO refreshTokenDO = oauth2RefreshTokenMapper.selectById(refreshToken);
|
||||||
|
// 校验刷新令牌是否合法
|
||||||
|
if (refreshTokenDO == null) { // 不存在
|
||||||
|
throw ServiceExceptionUtil.exception(OAUTH2_REFRESH_TOKEN_NOT_FOUND);
|
||||||
|
}
|
||||||
|
if (refreshTokenDO.getExpiresTime().getTime() < System.currentTimeMillis()) { // 已过期
|
||||||
|
throw ServiceExceptionUtil.exception(OAUTH_REFRESH_TOKEN_EXPIRED);
|
||||||
|
}
|
||||||
|
// 标记 refreshToken 对应的 accessToken 都不合法
|
||||||
|
// 这块的实现,参考了 Spring Security OAuth2 的代码
|
||||||
|
oauth2AccessTokenMapper.deleteByRefreshToken(refreshToken);
|
||||||
|
// 创建访问令牌
|
||||||
|
OAuth2AccessTokenDO oauth2AccessTokenDO = createOAuth2AccessToken(refreshTokenDO, createIp);
|
||||||
|
// 返回访问令牌
|
||||||
|
return OAuth2Convert.INSTANCE.convert(oauth2AccessTokenDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
private OAuth2AccessTokenDO createOAuth2AccessToken(OAuth2RefreshTokenDO refreshTokenDO, String createIp) {
|
||||||
|
OAuth2AccessTokenDO accessToken = new OAuth2AccessTokenDO()
|
||||||
|
.setId(generateAccessToken())
|
||||||
|
.setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType())
|
||||||
|
.setRefreshToken(refreshTokenDO.getId())
|
||||||
|
.setExpiresTime(new Date(System.currentTimeMillis() + accessTokenExpireTimeMillis))
|
||||||
|
.setCreateIp(createIp);
|
||||||
|
oauth2AccessTokenMapper.insert(accessToken);
|
||||||
|
return accessToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
private OAuth2RefreshTokenDO createOAuth2RefreshToken(Integer userId, Integer userType, String createIp) {
|
||||||
|
OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO()
|
||||||
|
.setId(generateRefreshToken())
|
||||||
|
.setUserId(userId).setUserType(userType)
|
||||||
|
.setExpiresTime(new Date(System.currentTimeMillis() + refreshTokenExpireTimeMillis))
|
||||||
|
.setCreateIp(createIp);
|
||||||
|
oauth2RefreshTokenMapper.insert(refreshToken);
|
||||||
|
return refreshToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String generateAccessToken() {
|
||||||
|
return StringUtils.uuid(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String generateRefreshToken() {
|
||||||
|
return StringUtils.uuid(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.service.oauth.bo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OAuth2.0 访问令牌 BO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class OAuth2AccessTokenBO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 访问令牌
|
||||||
|
*/
|
||||||
|
private String accessToken;
|
||||||
|
/**
|
||||||
|
* 刷新令牌
|
||||||
|
*/
|
||||||
|
private String refreshToken;
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*/
|
||||||
|
private Integer userId;
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
*/
|
||||||
|
private Integer userType;
|
||||||
|
/**
|
||||||
|
* 过期时间
|
||||||
|
*/
|
||||||
|
private Date expiresTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package cn.iocoder.mall.systemservice.service;
|
@ -0,0 +1,4 @@
|
|||||||
|
##################### 业务模块 #####################
|
||||||
|
## OAuth2CodeService
|
||||||
|
modules.oauth2-service.access-token-expire-time-millis = 2880000
|
||||||
|
modules.oauth2-service.refresh-token-expire-time-millis = 43200000
|
@ -1,24 +0,0 @@
|
|||||||
package cn.iocoder.mall.system.biz.dao.oauth2;
|
|
||||||
|
|
||||||
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2AccessTokenDO;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
public interface OAuth2AccessTokenMapper extends BaseMapper<OAuth2AccessTokenDO> {
|
|
||||||
|
|
||||||
default int updateToInvalid(Integer accountId) {
|
|
||||||
QueryWrapper<OAuth2AccessTokenDO> query = new QueryWrapper<OAuth2AccessTokenDO>()
|
|
||||||
.eq("account_id", accountId)
|
|
||||||
.eq("valid", true);
|
|
||||||
return update(new OAuth2AccessTokenDO().setValid(false), query);
|
|
||||||
}
|
|
||||||
|
|
||||||
default int updateToInvalidByRefreshToken(String refreshToken) {
|
|
||||||
QueryWrapper<OAuth2AccessTokenDO> query = new QueryWrapper<OAuth2AccessTokenDO>()
|
|
||||||
.eq("refresh_token", refreshToken).eq("valid", true);
|
|
||||||
return update(new OAuth2AccessTokenDO().setValid(false), query);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
package cn.iocoder.mall.system.biz.dao.oauth2;
|
|
||||||
|
|
||||||
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2RefreshTokenDO;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
public interface OAuth2RefreshTokenMapper extends BaseMapper<OAuth2RefreshTokenDO> {
|
|
||||||
|
|
||||||
default int updateToInvalid(Integer accountId) {
|
|
||||||
QueryWrapper<OAuth2RefreshTokenDO> query = new QueryWrapper<OAuth2RefreshTokenDO>()
|
|
||||||
.eq("account_id", accountId)
|
|
||||||
.eq("valid", true);
|
|
||||||
return update(new OAuth2RefreshTokenDO().setValid(false), query);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.biz.dataobject.account;
|
package cn.iocoder.mall.system.biz.dataobject.account;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.mall.mybatis.dataobject.DeletableDO;
|
import cn.iocoder.mall.mybatis.dataobject.DeletableDO;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
package cn.iocoder.mall.system.biz.service.account;
|
package cn.iocoder.mall.system.biz.service.account;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.mall.system.biz.bo.account.AccountBO;
|
import cn.iocoder.mall.system.biz.bo.account.AccountBO;
|
||||||
import cn.iocoder.mall.system.biz.convert.account.AccountConvert;
|
import cn.iocoder.mall.system.biz.convert.account.AccountConvert;
|
||||||
import cn.iocoder.mall.system.biz.dao.account.AccountMapper;
|
import cn.iocoder.mall.system.biz.dao.account.AccountMapper;
|
||||||
import cn.iocoder.mall.system.biz.dataobject.account.AccountDO;
|
import cn.iocoder.mall.system.biz.dataobject.account.AccountDO;
|
||||||
import cn.iocoder.mall.system.biz.dto.account.AccountCreateDTO;
|
import cn.iocoder.mall.system.biz.dto.account.AccountCreateDTO;
|
||||||
import cn.iocoder.mall.system.biz.service.account.AccountService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
package cn.iocoder.mall.system.biz.service.oauth2;
|
|
||||||
|
|
||||||
import cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AuthenticateBO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2AccessTokenAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2MobileCodeAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2RefreshTokenAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2UsernameAuthenticateDTO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OAuth2 Service 接口
|
|
||||||
*/
|
|
||||||
public interface OAuth2Service {
|
|
||||||
|
|
||||||
OAuth2AuthenticateBO authenticate(OAuth2UsernameAuthenticateDTO authenticateDTO);
|
|
||||||
|
|
||||||
OAuth2AuthenticateBO authenticate(OAuth2MobileCodeAuthenticateDTO authenticateDTO);
|
|
||||||
|
|
||||||
OAuth2AuthenticateBO authenticate(OAuth2AccessTokenAuthenticateDTO authenticateDTO);
|
|
||||||
|
|
||||||
OAuth2AuthenticateBO authenticate(OAuth2RefreshTokenAuthenticateDTO authenticateDTO);
|
|
||||||
|
|
||||||
}
|
|
@ -1,168 +0,0 @@
|
|||||||
package cn.iocoder.mall.system.biz.service.oauth2;
|
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
|
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
|
||||||
import cn.iocoder.common.framework.util.ValidationUtil;
|
|
||||||
import cn.iocoder.mall.system.biz.bo.account.AccountBO;
|
|
||||||
import cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AuthenticateBO;
|
|
||||||
import cn.iocoder.mall.system.biz.convert.oauth2.OAuth2Convert;
|
|
||||||
import cn.iocoder.mall.system.biz.dao.oauth2.OAuth2AccessTokenMapper;
|
|
||||||
import cn.iocoder.mall.system.biz.dao.oauth2.OAuth2RefreshTokenMapper;
|
|
||||||
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2AccessTokenDO;
|
|
||||||
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2RefreshTokenDO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.account.AccountCreateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2AccessTokenAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2MobileCodeAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2RefreshTokenAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2UsernameAuthenticateDTO;
|
|
||||||
import cn.iocoder.mall.system.biz.service.account.AccountService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import static cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum.*;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class OAuth2ServiceImpl implements OAuth2Service {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 访问令牌过期时间,单位:毫秒
|
|
||||||
*/
|
|
||||||
@Value("${modules.oauth2-code-service.access-token-expire-time-millis}")
|
|
||||||
private int accessTokenExpireTimeMillis;
|
|
||||||
/**
|
|
||||||
* 刷新令牌过期时间,单位:毫秒
|
|
||||||
*/
|
|
||||||
@Value("${modules.oauth2-code-service.refresh-token-expire-time-millis}")
|
|
||||||
private int refreshTokenExpireTimeMillis;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AccountService accountService;
|
|
||||||
@Autowired
|
|
||||||
private OAuth2MobileCodeService oauth2MobileCodeService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private OAuth2AccessTokenMapper oauth2AccessTokenMapper;
|
|
||||||
@Autowired
|
|
||||||
private OAuth2RefreshTokenMapper oauth2RefreshTokenMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public OAuth2AuthenticateBO authenticate(OAuth2UsernameAuthenticateDTO authenticateDTO) {
|
|
||||||
// 获得账号
|
|
||||||
AccountBO accountBO = accountService.getByUsername(authenticateDTO.getUsername());
|
|
||||||
if (accountBO == null) {
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH2_ACCOUNT_NOT_FOUND);
|
|
||||||
}
|
|
||||||
// 校验密码
|
|
||||||
if (!accountService.matchPassword(authenticateDTO.getPassword(), accountBO.getPassword())) {
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH2_ACCOUNT_PASSWORD_ERROR);
|
|
||||||
}
|
|
||||||
// TODO 记录账号最后登陆时间和 ip 等
|
|
||||||
// 创建刷新令牌 + 访问令牌
|
|
||||||
OAuth2RefreshTokenDO oauth2RefreshTokenDO = createOAuth2RefreshToken(accountBO.getId());
|
|
||||||
OAuth2AccessTokenDO oauth2AccessTokenDO = createOAuth2AccessToken(accountBO.getId(), oauth2RefreshTokenDO.getId());
|
|
||||||
// 返回访问令牌
|
|
||||||
return OAuth2Convert.INSTANCE.convert(oauth2AccessTokenDO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public OAuth2AuthenticateBO authenticate(OAuth2MobileCodeAuthenticateDTO authenticateDTO) {
|
|
||||||
// 校验手机格式
|
|
||||||
if (!ValidationUtil.isMobile(authenticateDTO.getMobile())) {
|
|
||||||
throw ServiceExceptionUtil.exception(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), "手机格式不正确"); // TODO 有点搓
|
|
||||||
}
|
|
||||||
// 使用手机验证码。如果验证不通过,则会抛出异常
|
|
||||||
oauth2MobileCodeService.use(authenticateDTO.getMobile(), authenticateDTO.getCode());
|
|
||||||
// 获得账号
|
|
||||||
AccountBO accountBO = accountService.getByMobile(authenticateDTO.getMobile());
|
|
||||||
if (accountBO == null) { // 账号不存时,自动创建
|
|
||||||
// 创建账号
|
|
||||||
accountBO = accountService.create(new AccountCreateDTO()
|
|
||||||
.setMobile(authenticateDTO.getMobile())
|
|
||||||
.setCreateIp(authenticateDTO.getIp())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// TODO 记录账号最后登陆时间和 ip 等
|
|
||||||
// 创建刷新令牌 + 访问令牌
|
|
||||||
OAuth2RefreshTokenDO oauth2RefreshTokenDO = createOAuth2RefreshToken(accountBO.getId());
|
|
||||||
OAuth2AccessTokenDO oauth2AccessTokenDO = createOAuth2AccessToken(accountBO.getId(), oauth2RefreshTokenDO.getId());
|
|
||||||
// 返回访问令牌
|
|
||||||
return OAuth2Convert.INSTANCE.convert(oauth2AccessTokenDO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OAuth2AuthenticateBO authenticate(OAuth2AccessTokenAuthenticateDTO authenticateDTO) {
|
|
||||||
OAuth2AccessTokenDO oauth2AccessTokenDO = oauth2AccessTokenMapper.selectById(authenticateDTO.getAccessToken());
|
|
||||||
if (oauth2AccessTokenDO == null) { // 不存在
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH2_ACCESS_TOKEN_NOT_FOUND);
|
|
||||||
}
|
|
||||||
if (oauth2AccessTokenDO.getExpiresTime().getTime() < System.currentTimeMillis()) { // 已过期
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH2_ACCESS_TOKEN_TOKEN_EXPIRED);
|
|
||||||
}
|
|
||||||
if (!oauth2AccessTokenDO.getValid()) { // 无效
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH2_ACCESS_TOKEN_INVALID);
|
|
||||||
}
|
|
||||||
// 转换返回
|
|
||||||
return OAuth2Convert.INSTANCE.convert(oauth2AccessTokenDO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public OAuth2AuthenticateBO authenticate(OAuth2RefreshTokenAuthenticateDTO authenticateDTO) {
|
|
||||||
OAuth2RefreshTokenDO refreshTokenDO = oauth2RefreshTokenMapper.selectById(authenticateDTO.getRefreshToken());
|
|
||||||
// 校验刷新令牌是否合法
|
|
||||||
if (refreshTokenDO == null) { // 不存在
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH2_REFRESH_TOKEN_NOT_FOUND);
|
|
||||||
}
|
|
||||||
if (refreshTokenDO.getExpiresTime().getTime() < System.currentTimeMillis()) { // 已过期
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH_REFRESH_TOKEN_EXPIRED);
|
|
||||||
}
|
|
||||||
if (!refreshTokenDO.getValid()) { // 无效
|
|
||||||
throw ServiceExceptionUtil.exception(OAUTH_REFRESH_TOKEN_INVALID);
|
|
||||||
}
|
|
||||||
// 标记 refreshToken 对应的 accessToken 都不合法
|
|
||||||
// 这块的实现,参考了 Spring Security OAuth2 的代码
|
|
||||||
oauth2AccessTokenMapper.updateToInvalidByRefreshToken(authenticateDTO.getRefreshToken());
|
|
||||||
// 创建访问令牌
|
|
||||||
OAuth2AccessTokenDO oauth2AccessTokenDO = createOAuth2AccessToken(refreshTokenDO.getAccountId(),
|
|
||||||
refreshTokenDO.getId());
|
|
||||||
// 转换返回
|
|
||||||
return OAuth2Convert.INSTANCE.convert(oauth2AccessTokenDO);
|
|
||||||
}
|
|
||||||
|
|
||||||
private OAuth2AccessTokenDO createOAuth2AccessToken(Integer accountId, String refreshToken) {
|
|
||||||
OAuth2AccessTokenDO accessToken = new OAuth2AccessTokenDO()
|
|
||||||
.setId(generateAccessToken())
|
|
||||||
.setAccountId(accountId)
|
|
||||||
.setRefreshToken(refreshToken)
|
|
||||||
.setExpiresTime(new Date(System.currentTimeMillis() + accessTokenExpireTimeMillis))
|
|
||||||
.setValid(true);
|
|
||||||
oauth2AccessTokenMapper.insert(accessToken);
|
|
||||||
return accessToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
private OAuth2RefreshTokenDO createOAuth2RefreshToken(Integer accountId) {
|
|
||||||
OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO()
|
|
||||||
.setId(generateRefreshToken())
|
|
||||||
.setAccountId(accountId)
|
|
||||||
.setExpiresTime(new Date(System.currentTimeMillis() + refreshTokenExpireTimeMillis))
|
|
||||||
.setValid(true);
|
|
||||||
oauth2RefreshTokenMapper.insert(refreshToken);
|
|
||||||
return refreshToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String generateAccessToken() {
|
|
||||||
return UUID.randomUUID().toString().replaceAll("-", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
private String generateRefreshToken() {
|
|
||||||
return UUID.randomUUID().toString().replaceAll("-", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,8 +1,4 @@
|
|||||||
##################### 业务模块 #####################
|
##################### 业务模块 #####################
|
||||||
## OAuth2CodeService
|
## OAuth2Service
|
||||||
modules.oauth2-code-service.access-token-expire-time-millis = 2880000
|
modules.oauth2-code-service.access-token-expire-time-millis = 2880000
|
||||||
modules.oauth2-code-service.refresh-token-expire-time-millis = 43200000
|
modules.oauth2-code-service.refresh-token-expire-time-millis = 43200000
|
||||||
## OAuth2MobileCodeService
|
|
||||||
modules.oauth2-mobile-code-service.code-expire-time-millis = 600000
|
|
||||||
modules.oauth2-mobile-code-service.send-maximum-quantity-per-day = 10
|
|
||||||
modules.oauth2-mobile-code-service.send-frequency = 60000
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.admin;
|
package cn.iocoder.mall.system.rest.controller.admin;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.admin;
|
package cn.iocoder.mall.system.rest.controller.admin;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.system.biz.bo.user.UserBO;
|
import cn.iocoder.mall.system.biz.bo.user.UserBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.authorization;
|
package cn.iocoder.mall.system.rest.controller.authorization;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
||||||
import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder;
|
import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.authorization;
|
package cn.iocoder.mall.system.rest.controller.authorization;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
||||||
import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder;
|
import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.authorization;
|
package cn.iocoder.mall.system.rest.controller.authorization;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.datadict;
|
package cn.iocoder.mall.system.rest.controller.datadict;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.errorCode;
|
package cn.iocoder.mall.system.rest.controller.errorCode;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.oauth2;
|
package cn.iocoder.mall.system.rest.controller.oauth2;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.security.core.annotation.RequiresNone;
|
import cn.iocoder.mall.security.core.annotation.RequiresNone;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.rest.controller.oauth2;
|
package cn.iocoder.mall.system.rest.controller.oauth2;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.mall.system.biz.service.oauth2.OAuth2MobileCodeService;
|
import cn.iocoder.mall.system.biz.service.oauth2.OAuth2MobileCodeService;
|
||||||
import cn.iocoder.mall.system.biz.service.oauth2.OAuth2Service;
|
import cn.iocoder.mall.system.biz.service.oauth2.OAuth2Service;
|
||||||
import cn.iocoder.mall.system.biz.service.user.UserService;
|
import cn.iocoder.mall.system.biz.service.user.UserService;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.api.dto.admin;
|
package cn.iocoder.mall.system.api.dto.admin;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package cn.iocoder.mall.admin.service;
|
package cn.iocoder.mall.admin.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.constant.UserTypeEnum;
|
import cn.iocoder.common.framework.enums.UserTypeEnum;
|
||||||
import cn.iocoder.common.framework.util.CollectionUtil;
|
import cn.iocoder.common.framework.util.CollectionUtil;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.admin.service;
|
package cn.iocoder.mall.admin.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.system.api.DataDictService;
|
import cn.iocoder.mall.system.api.DataDictService;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.admin.service;
|
package cn.iocoder.mall.admin.service;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
import cn.iocoder.common.framework.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.common.framework.exception.ServiceException;
|
import cn.iocoder.common.framework.exception.ServiceException;
|
||||||
import cn.iocoder.mall.system.api.SmsService;
|
import cn.iocoder.mall.system.api.SmsService;
|
||||||
import cn.iocoder.mall.system.api.bo.sms.PageSmsSignBO;
|
import cn.iocoder.mall.system.api.bo.sms.PageSmsSignBO;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.system.application.controller.admins;
|
package cn.iocoder.mall.system.application.controller.admins;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
import cn.iocoder.common.framework.enums.MallConstants;
|
||||||
import cn.iocoder.common.framework.util.CollectionUtil;
|
import cn.iocoder.common.framework.util.CollectionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package cn.iocoder.mall.userservice.rpc.user.vo;
|
package cn.iocoder.mall.userservice.rpc.user.vo;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户响应
|
* 用户响应
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
public class UserVO implements Serializable {
|
public class UserVO implements Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.userservice.dal.mysql.dataobject.user;
|
package cn.iocoder.mall.userservice.dal.mysql.dataobject.user;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.mall.mybatis.dataobject.BaseDO;
|
import cn.iocoder.mall.mybatis.dataobject.BaseDO;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.userservice.service.sms;
|
package cn.iocoder.mall.userservice.service.sms;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
|
import cn.iocoder.common.framework.enums.SysErrorCodeEnum;
|
||||||
import cn.iocoder.common.framework.exception.ServiceException;
|
import cn.iocoder.common.framework.exception.ServiceException;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.util.ValidationUtil;
|
import cn.iocoder.common.framework.util.ValidationUtil;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.mall.userservice.service.user;
|
package cn.iocoder.mall.userservice.service.user;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.util.DigestUtils;
|
import cn.iocoder.common.framework.util.DigestUtils;
|
||||||
import cn.iocoder.common.framework.util.StringUtils;
|
import cn.iocoder.common.framework.util.StringUtils;
|
||||||
import cn.iocoder.mall.userservice.convert.user.UserConvert;
|
import cn.iocoder.mall.userservice.convert.user.UserConvert;
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package cn.iocoder.mall.userservice.service.user.bo;
|
package cn.iocoder.mall.userservice.service.user.bo;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户信息
|
* 用户信息
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
public class UserBO {
|
public class UserBO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,6 +43,12 @@
|
|||||||
<artifactId>user-service-api</artifactId>
|
<artifactId>user-service-api</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<!-- 系统服务 -->
|
||||||
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
|
<artifactId>system-service-api</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- Registry 和 Config 相关 -->
|
<!-- Registry 和 Config 相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -27,10 +27,6 @@ public class UserPassportVO {
|
|||||||
* 刷新令牌
|
* 刷新令牌
|
||||||
*/
|
*/
|
||||||
private String refreshToken;
|
private String refreshToken;
|
||||||
/**
|
|
||||||
* 账号编号
|
|
||||||
*/
|
|
||||||
private Integer accountId;
|
|
||||||
/**
|
/**
|
||||||
* 过期时间
|
* 过期时间
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.mall.userweb.convert.passport;
|
package cn.iocoder.mall.userweb.convert.passport;
|
||||||
|
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO;
|
||||||
import cn.iocoder.mall.userservice.rpc.sms.vo.UserSendSmsCodeDTO;
|
import cn.iocoder.mall.userservice.rpc.sms.vo.UserSendSmsCodeDTO;
|
||||||
import cn.iocoder.mall.userservice.rpc.sms.vo.UserVerifySmsCodeDTO;
|
import cn.iocoder.mall.userservice.rpc.sms.vo.UserVerifySmsCodeDTO;
|
||||||
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateDTO;
|
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateDTO;
|
||||||
@ -16,10 +17,13 @@ public interface UserPassportConvert {
|
|||||||
UserPassportConvert INSTANCE = Mappers.getMapper(UserPassportConvert.class);
|
UserPassportConvert INSTANCE = Mappers.getMapper(UserPassportConvert.class);
|
||||||
|
|
||||||
UserVerifySmsCodeDTO convert(UserPassportLoginBySmsDTO bean);
|
UserVerifySmsCodeDTO convert(UserPassportLoginBySmsDTO bean);
|
||||||
|
|
||||||
UserCreateDTO convert02(UserPassportLoginBySmsDTO bean);
|
UserCreateDTO convert02(UserPassportLoginBySmsDTO bean);
|
||||||
|
|
||||||
UserPassportVO convert(UserVO userVO);
|
default UserPassportVO convert(UserVO userVO, OAuth2AccessTokenVO accessTokenVO) {
|
||||||
|
return new UserPassportVO().setUser(convert(userVO)).setAuthorization(convert(accessTokenVO));
|
||||||
|
}
|
||||||
|
UserPassportVO.User convert(UserVO userVO);
|
||||||
|
UserPassportVO.Authentication convert(OAuth2AccessTokenVO accessTokenVO);
|
||||||
|
|
||||||
UserSendSmsCodeDTO convert(UserPassportSendSmsCodeDTO bean);
|
UserSendSmsCodeDTO convert(UserPassportSendSmsCodeDTO bean);
|
||||||
|
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package cn.iocoder.mall.userweb.manager.passport;
|
package cn.iocoder.mall.userweb.manager.passport;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.enums.UserTypeEnum;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.OAuth2Rpc;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2CreateAccessTokenDTO;
|
||||||
|
import cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO;
|
||||||
import cn.iocoder.mall.userservice.enums.sms.UserSmsSceneEnum;
|
import cn.iocoder.mall.userservice.enums.sms.UserSmsSceneEnum;
|
||||||
import cn.iocoder.mall.userservice.rpc.sms.UserSmsCodeRpc;
|
import cn.iocoder.mall.userservice.rpc.sms.UserSmsCodeRpc;
|
||||||
import cn.iocoder.mall.userservice.rpc.user.UserRpc;
|
import cn.iocoder.mall.userservice.rpc.user.UserRpc;
|
||||||
@ -19,21 +23,30 @@ public class UserPassportManager {
|
|||||||
private UserSmsCodeRpc userSmsCodeRpc;
|
private UserSmsCodeRpc userSmsCodeRpc;
|
||||||
@Reference(version = "${dubbo.consumer.UserRpc.version}", validation = "false")
|
@Reference(version = "${dubbo.consumer.UserRpc.version}", validation = "false")
|
||||||
private UserRpc userRpc;
|
private UserRpc userRpc;
|
||||||
|
@Reference(version = "${dubbo.consumer.OAuth2Rpc.version}", validation = "false")
|
||||||
|
private OAuth2Rpc oauth2Rpc;
|
||||||
|
|
||||||
public UserPassportVO loginBySms(UserPassportLoginBySmsDTO loginBySmsDTO, String ip) {
|
public UserPassportVO loginBySms(UserPassportLoginBySmsDTO loginBySmsDTO, String ip) {
|
||||||
// 校验验证码
|
// 校验验证码
|
||||||
CommonResult<Boolean> verifySmsCodeResult = userSmsCodeRpc.verifySmsCode(UserPassportConvert.INSTANCE.convert(loginBySmsDTO)
|
CommonResult<Boolean> verifySmsCodeResult = userSmsCodeRpc.verifySmsCode(
|
||||||
.setScene(UserSmsSceneEnum.LOGIN_BY_SMS.getValue()).setIp(ip));
|
UserPassportConvert.INSTANCE.convert(loginBySmsDTO).setScene(UserSmsSceneEnum.LOGIN_BY_SMS.getValue()).setIp(ip));
|
||||||
verifySmsCodeResult.checkError();
|
verifySmsCodeResult.checkError();
|
||||||
// 获得用户
|
// 获得用户
|
||||||
CommonResult<UserVO> createUserResult = userRpc.createUserIfAbsent(UserPassportConvert.INSTANCE.convert02(loginBySmsDTO).setIp(ip));
|
CommonResult<UserVO> createUserResult = userRpc.createUserIfAbsent(
|
||||||
|
UserPassportConvert.INSTANCE.convert02(loginBySmsDTO).setIp(ip));
|
||||||
createUserResult.checkError();
|
createUserResult.checkError();
|
||||||
// 创建访问令牌
|
// 创建访问令牌
|
||||||
return UserPassportConvert.INSTANCE.convert(createUserResult.getData());
|
CommonResult<OAuth2AccessTokenVO> createAccessTokenResult = oauth2Rpc.createAccessToken(
|
||||||
|
new OAuth2CreateAccessTokenDTO().setUserId(createUserResult.getData().getId())
|
||||||
|
.setUserType(UserTypeEnum.USER.getValue()).setCreateIp(ip));
|
||||||
|
createAccessTokenResult.checkError();
|
||||||
|
// 返回
|
||||||
|
return UserPassportConvert.INSTANCE.convert(createUserResult.getData(), createAccessTokenResult.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendSmsCode(UserPassportSendSmsCodeDTO sendSmsCodeDTO, String ip) {
|
public void sendSmsCode(UserPassportSendSmsCodeDTO sendSmsCodeDTO, String ip) {
|
||||||
CommonResult<Boolean> sendSmsCodeResult = userSmsCodeRpc.sendSmsCode(UserPassportConvert.INSTANCE.convert(sendSmsCodeDTO).setIp(ip));
|
CommonResult<Boolean> sendSmsCodeResult = userSmsCodeRpc.sendSmsCode(
|
||||||
|
UserPassportConvert.INSTANCE.convert(sendSmsCodeDTO).setIp(ip));
|
||||||
sendSmsCodeResult.checkError();
|
sendSmsCodeResult.checkError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ spring:
|
|||||||
dubbo:
|
dubbo:
|
||||||
# Spring Cloud Alibaba Dubbo 专属配置
|
# Spring Cloud Alibaba Dubbo 专属配置
|
||||||
cloud:
|
cloud:
|
||||||
subscribed-services: 'user-service' # 设置订阅的应用列表,默认为 * 订阅所有应用
|
subscribed-services: 'user-service, system-service' # 设置订阅的应用列表,默认为 * 订阅所有应用
|
||||||
# Dubbo 服务消费者的配置
|
# Dubbo 服务消费者的配置
|
||||||
consumer:
|
consumer:
|
||||||
timeout: 10000
|
timeout: 10000
|
||||||
@ -24,3 +24,5 @@ dubbo:
|
|||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
UserRpc:
|
UserRpc:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
OAuth2Rpc:
|
||||||
|
version: 1.0.0
|
||||||
|
Loading…
Reference in New Issue
Block a user