提交 20d8db6c authored 作者: YunaiV's avatar YunaiV

完成 oauth2.0 的逻辑

上级 dfd1360b
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 { ...@@ -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 { ...@@ -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;
......
package cn.iocoder.common.framework.constant; package cn.iocoder.common.framework.enums;
/** /**
* Mall 全局枚举 * Mall 全局枚举
......
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 { ...@@ -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 { ...@@ -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;
......
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;
......
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;
......
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;
......
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;
/** /**
* 错误码区间 * 错误码区间
......
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;
......
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;
......
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;
/** /**
* 错误码区间 * 错误码区间
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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 { ...@@ -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;
/** /**
......
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;
......
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;
......
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;
......
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 { ...@@ -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 { ...@@ -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 { ...@@ -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;
/** /**
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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);
} }
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;
}
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;
}
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;
}
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);
}
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; ...@@ -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
...@@ -26,24 +29,28 @@ public class OAuth2AccessTokenDO extends BaseDO { ...@@ -26,24 +29,28 @@ public class OAuth2AccessTokenDO extends BaseDO {
@TableId(type = IdType.INPUT) @TableId(type = IdType.INPUT)
private String id; private String id;
/** /**
* 刷新令牌 * 用户编号
*/
private Integer userId;
/**
* 用户类型
* *
* 关联 {@link OAuth2RefreshTokenDO#getId()} * 枚举 {@link UserTypeEnum}
*/ */
private String refreshToken; private Integer userType;
/** /**
* 账号编号 * 刷新令牌
* *
* 关联 {@link AccountDO#getId()} * 关联 {@link OAuth2RefreshTokenDO#getId()}
*/ */
private Integer accountId; private String refreshToken;
/** /**
* 过期时间 * 过期时间
*/ */
private Date expiresTime; private Date expiresTime;
/** /**
* 是否有效 * 创建 IP
*/ */
private Boolean valid; private String createIp;
} }
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; ...@@ -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 { ...@@ -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;
} }
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));
}
}
package cn.iocoder.mall.system.biz.dao.oauth2; package cn.iocoder.mall.systemservice.dal.mysql.mapper.oauth;
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2RefreshTokenDO; import cn.iocoder.mall.systemservice.dal.mysql.dataobject.oauth.OAuth2RefreshTokenDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -8,11 +8,9 @@ import org.springframework.stereotype.Repository; ...@@ -8,11 +8,9 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface OAuth2RefreshTokenMapper extends BaseMapper<OAuth2RefreshTokenDO> { public interface OAuth2RefreshTokenMapper extends BaseMapper<OAuth2RefreshTokenDO> {
default int updateToInvalid(Integer accountId) { default int deleteByUserIdAndUserType(Integer userId, Integer userType) {
QueryWrapper<OAuth2RefreshTokenDO> query = new QueryWrapper<OAuth2RefreshTokenDO>() return delete(new QueryWrapper<OAuth2RefreshTokenDO>()
.eq("account_id", accountId) .eq("user_id", userId).eq("user_type", userType));
.eq("valid", true);
return update(new OAuth2RefreshTokenDO().setValid(false), query);
} }
} }
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);
}
}
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));
}
} }
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;
}
##################### 业务模块 #####################
## OAuth2CodeService
modules.oauth2-service.access-token-expire-time-millis = 2880000
modules.oauth2-service.refresh-token-expire-time-millis = 43200000
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);
}
}
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;
......
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;
......
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);
}
##################### 业务模块 ##################### ##################### 业务模块 #####################
## 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
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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;
......
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 {
/** /**
......
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;
......
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;
......
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;
......
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 @@ ...@@ -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 { ...@@ -27,10 +27,6 @@ public class UserPassportVO {
* 刷新令牌 * 刷新令牌
*/ */
private String refreshToken; private String refreshToken;
/**
* 账号编号
*/
private Integer accountId;
/** /**
* 过期时间 * 过期时间
*/ */
......
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 { ...@@ -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);
......
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 { ...@@ -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: ...@@ -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: ...@@ -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
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论