Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
bedaaf09
提交
bedaaf09
authored
7月 04, 2020
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完整管理员登陆接口的开发
上级
ee6fa2b8
隐藏空白字符变更
内嵌
并排
正在显示
36 个修改的文件
包含
568 行增加
和
223 行删除
+568
-223
pom.xml
management-web-app/pom.xml
+88
-0
ManagementWebApplication.java
.../iocoder/mall/managementweb/ManagementWebApplication.java
+13
-0
AdminPassportController.java
...ementweb/controller/passport/AdminPassportController.java
+35
-0
AdminPassportLoginDTO.java
...entweb/controller/passport/dto/AdminPassportLoginDTO.java
+5
-4
AdminPassportVO.java
...managementweb/controller/passport/vo/AdminPassportVO.java
+22
-23
AdminPassportConvert.java
.../managementweb/convert/passport/AdminPassportConvert.java
+24
-0
AdminPassportManager.java
...all/managementweb/manager/admin/AdminPassportManager.java
+37
-0
application-dev.yml
management-web-app/src/main/resources/application-dev.yml
+14
-0
application-local.yml
management-web-app/src/main/resources/application-local.yml
+14
-0
application.yml
management-web-app/src/main/resources/application.yml
+30
-0
pom.xml
pom.xml
+2
-0
pom.xml
shop-web-app/pom.xml
+15
-0
SystemErrorCodeEnum.java
...iocoder/mall/systemservice/enums/SystemErrorCodeEnum.java
+2
-3
AdminRpc.java
...ava/cn/iocoder/mall/systemservice/rpc/admin/AdminRpc.java
+14
-0
AdminVerifyPasswordDTO.java
...l/systemservice/rpc/admin/dto/AdminVerifyPasswordDTO.java
+36
-0
AdminVO.java
...a/cn/iocoder/mall/systemservice/rpc/admin/vo/AdminVO.java
+38
-0
AdminConvert.java
...ocoder/mall/systemservice/convert/admin/AdminConvert.java
+24
-0
package-info.java
...a/cn/iocoder/mall/systemservice/convert/package-info.java
+0
-1
AdminManager.java
...ocoder/mall/systemservice/manager/admin/AdminManager.java
+23
-0
package-info.java
...a/cn/iocoder/mall/systemservice/manager/package-info.java
+0
-1
AdminRpcImpl.java
...cn/iocoder/mall/systemservice/rpc/admin/AdminRpcImpl.java
+23
-0
package-info.java
.../java/cn/iocoder/mall/systemservice/rpc/package-info.java
+0
-1
AdminService.java
...ocoder/mall/systemservice/service/admin/AdminService.java
+39
-0
AdminBO.java
.../iocoder/mall/systemservice/service/admin/bo/AdminBO.java
+41
-0
package-info.java
...a/cn/iocoder/mall/systemservice/service/package-info.java
+0
-1
application.yaml
...ct/system-service-app/src/main/resources/application.yaml
+2
-0
AdminServiceImpl.java
...coder/mall/system/biz/service/admin/AdminServiceImpl.java
+0
-13
UserService.java
.../cn/iocoder/mall/system/biz/service/user/UserService.java
+1
-6
UserServiceImpl.java
...iocoder/mall/system/biz/service/user/UserServiceImpl.java
+0
-32
AdminsOAuth2Controller.java
...system/rest/controller/oauth2/AdminsOAuth2Controller.java
+0
-52
UsersOAuth2Controller.java
.../system/rest/controller/oauth2/UsersOAuth2Controller.java
+0
-26
UsersOAuth2MobileCodeAuthenticateRequest.java
...uest/oauth2/UsersOAuth2MobileCodeAuthenticateRequest.java
+0
-29
UserPassportController.java
...l/userweb/controller/passport/UserPassportController.java
+2
-0
UserPassportLoginBySmsDTO.java
...eb/controller/passport/dto/UserPassportLoginBySmsDTO.java
+10
-4
UserPassportVO.java
...r/mall/userweb/controller/passport/vo/UserPassportVO.java
+11
-27
UserController.java
.../iocoder/mall/userweb/controller/user/UserController.java
+3
-0
没有找到文件。
management-web-app/pom.xml
0 → 100644
浏览文件 @
bedaaf09
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
onemall
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
management-web-app
</artifactId>
<description>
管理后台,提供管理员管理的所有功能
</description>
<dependencyManagement>
<dependencies>
<!-- onemall 基础 bom 文件 -->
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
mall-dependencies
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<type>
pom
</type>
<scope>
import
</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Web 相关 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<!-- RPC 相关 -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-dubbo
</artifactId>
</dependency>
<dependency>
<!-- 用户服务 -->
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
user-service-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<!-- 系统服务 -->
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
system-service-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<!-- Registry 和 Config 相关 -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct
</artifactId>
<!-- use mapstruct-jdk8 for Java 8 or higher -->
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct-jdk8
</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>javax.el</groupId>-->
<!-- <artifactId>javax.el-api</artifactId>-->
<!-- <version>3.0.0</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>javax.el</groupId>-->
<!-- <artifactId>javax.el-api</artifactId>-->
<!-- <version>3.0.1-b06</version>-->
<!-- </dependency>-->
</dependencies>
</project>
management-web-app/src/main/java/cn/iocoder/mall/managementweb/ManagementWebApplication.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
managementweb
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
ManagementWebApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ManagementWebApplication
.
class
,
args
);
}
}
management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/AdminPassportController.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
managementweb
.
controller
.
passport
;
import
cn.iocoder.common.framework.util.HttpUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.managementweb.controller.passport.dto.AdminPassportLoginDTO
;
import
cn.iocoder.mall.managementweb.controller.passport.vo.AdminPassportVO
;
import
cn.iocoder.mall.managementweb.manager.admin.AdminPassportManager
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
static
cn
.
iocoder
.
common
.
framework
.
vo
.
CommonResult
.
success
;
@Api
(
tags
=
"管理员 Passport API"
)
@RestController
@RequestMapping
(
"/passport"
)
public
class
AdminPassportController
{
@Autowired
private
AdminPassportManager
adminPassportManager
;
@PostMapping
(
"/login"
)
@ApiOperation
(
"账号密码登陆"
)
// @RequiresNone TODO 晚点加上
public
CommonResult
<
AdminPassportVO
>
login
(
AdminPassportLoginDTO
loginDTO
,
HttpServletRequest
request
)
{
return
success
(
adminPassportManager
.
login
(
loginDTO
,
HttpUtil
.
getIp
(
request
)));
}
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/oauth2/AdminsOAuth2UsernameAuthenticateRequest
.java
→
management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/dto/AdminPassportLoginDTO
.java
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
system
.
rest
.
request
.
oauth2
;
package
cn
.
iocoder
.
mall
.
managementweb
.
controller
.
passport
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
...
...
@@ -8,11 +8,12 @@ import org.hibernate.validator.constraints.Length;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Pattern
;
import
java.io.Serializable
;
@ApiModel
(
"管理
员 - OAuth2 模块 - 用户名认证请求
"
)
@ApiModel
(
"管理
登录 DTO
"
)
@Data
@Accessors
(
chain
=
true
)
public
class
Admin
sOAuth2UsernameAuthenticateRequest
{
public
class
Admin
PassportLoginDTO
implements
Serializable
{
@ApiModelProperty
(
value
=
"用户名"
,
required
=
true
,
example
=
"yudaoyuanma"
)
@NotEmpty
(
message
=
"登陆账号不能为空"
)
...
...
@@ -20,7 +21,7 @@ public class AdminsOAuth2UsernameAuthenticateRequest {
@Pattern
(
regexp
=
"^[A-Za-z0-9]+$"
,
message
=
"账号格式为数字以及字母"
)
private
String
username
;
@ApiModelProperty
(
value
=
"
用户名
"
,
required
=
true
,
example
=
"buzhidao"
)
@ApiModelProperty
(
value
=
"
密码
"
,
required
=
true
,
example
=
"buzhidao"
)
@NotEmpty
(
message
=
"密码不能为空"
)
@Length
(
min
=
4
,
max
=
16
,
message
=
"密码长度为 4-16 位"
)
private
String
password
;
...
...
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/oauth2/AdminsOAuth2AuthenticateResponse
.java
→
management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/AdminPassportVO
.java
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
system
.
rest
.
response
.
oauth2
;
package
cn
.
iocoder
.
mall
.
managementweb
.
controller
.
passport
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
...
...
@@ -7,45 +7,44 @@ import lombok.experimental.Accessors;
import
java.util.Date
;
@ApiModel
(
"管理员
- OAuth2 模块 - 认证响应
"
)
@ApiModel
(
"管理员
通信证信息 VO
"
)
@Data
@Accessors
(
chain
=
true
)
public
class
Admin
sOAuth2AuthenticateResponse
{
public
class
Admin
PassportVO
{
@ApiModel
(
"
管理员
"
)
@ApiModel
(
"
认证信息
"
)
@Data
public
static
class
Admin
{
@ApiModelProperty
(
value
=
"管理员编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@Accessors
(
chain
=
true
)
public
static
class
Authentication
{
@ApiModelProperty
(
value
=
"真实名字"
,
required
=
true
,
example
=
"小王"
)
private
String
name
;
@ApiModelProperty
(
value
=
"访问令牌"
,
required
=
true
,
example
=
"001e8f49b20e47f7b3a2de774497cd50"
)
private
String
accessToken
;
@ApiModelProperty
(
value
=
"刷新令牌"
,
required
=
true
,
example
=
"001e8f49b20e47f7b3a2de774497cd50"
)
private
String
refreshToken
;
@ApiModelProperty
(
value
=
"过期时间"
,
required
=
true
)
private
Date
expiresTime
;
}
@ApiModel
(
"
访问令牌
"
)
@ApiModel
(
"
管理员信息
"
)
@Data
public
static
class
Token
{
@ApiModelProperty
(
value
=
"access token"
,
required
=
true
,
example
=
"001e8f49b20e47f7b3a2de774497cd50"
)
private
String
accessToken
;
@ApiModelProperty
(
value
=
"refresh token"
,
required
=
true
,
example
=
"001e8f49b20e47f7b3a2de774497cd50"
)
private
String
refreshToken
;
@Accessors
(
chain
=
true
)
public
static
class
Admin
{
@ApiModelProperty
(
value
=
"过期时间"
,
required
=
true
)
private
Date
expiresTime
;
@ApiModelProperty
(
value
=
"用户编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"真实姓名"
,
required
=
true
,
example
=
"小王"
)
private
String
name
;
}
/**
* 管理员
* 管理员
信息
*/
private
Admin
admin
;
/**
*
访问令牌
*
认证信息
*/
private
Token
toke
n
;
private
Authentication
authorizatio
n
;
}
management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/passport/AdminPassportConvert.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
managementweb
.
convert
.
passport
;
import
cn.iocoder.mall.managementweb.controller.passport.dto.AdminPassportLoginDTO
;
import
cn.iocoder.mall.managementweb.controller.passport.vo.AdminPassportVO
;
import
cn.iocoder.mall.systemservice.rpc.admin.dto.AdminVerifyPasswordDTO
;
import
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO
;
import
cn.iocoder.mall.systemservice.rpc.oauth.vo.OAuth2AccessTokenVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
@Mapper
public
interface
AdminPassportConvert
{
AdminPassportConvert
INSTANCE
=
Mappers
.
getMapper
(
AdminPassportConvert
.
class
);
AdminVerifyPasswordDTO
convert
(
AdminPassportLoginDTO
loginDTO
);
default
AdminPassportVO
convert
(
AdminVO
adminVO
,
OAuth2AccessTokenVO
accessTokenVO
)
{
return
new
AdminPassportVO
().
setAdmin
(
convert
(
adminVO
)).
setAuthorization
(
convert
(
accessTokenVO
));
}
AdminPassportVO
.
Admin
convert
(
AdminVO
adminVO
);
AdminPassportVO
.
Authentication
convert
(
OAuth2AccessTokenVO
accessTokenVO
);
}
management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/AdminPassportManager.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
managementweb
.
manager
.
admin
;
import
cn.iocoder.common.framework.enums.UserTypeEnum
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.managementweb.controller.passport.dto.AdminPassportLoginDTO
;
import
cn.iocoder.mall.managementweb.controller.passport.vo.AdminPassportVO
;
import
cn.iocoder.mall.managementweb.convert.passport.AdminPassportConvert
;
import
cn.iocoder.mall.systemservice.rpc.admin.AdminRpc
;
import
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO
;
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
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.stereotype.Service
;
@Service
public
class
AdminPassportManager
{
@Reference
(
version
=
"${dubbo.consumer.AdminRpc.version}"
,
validation
=
"false"
)
private
AdminRpc
adminRpc
;
@Reference
(
version
=
"${dubbo.consumer.OAuth2Rpc.version}"
,
validation
=
"false"
)
private
OAuth2Rpc
oauth2Rpc
;
public
AdminPassportVO
login
(
AdminPassportLoginDTO
loginDTO
,
String
ip
)
{
// 校验管理员密码
CommonResult
<
AdminVO
>
verifyPasswordResult
=
adminRpc
.
verifyPassword
(
AdminPassportConvert
.
INSTANCE
.
convert
(
loginDTO
).
setIp
(
ip
));
verifyPasswordResult
.
checkError
();
// 创建访问令牌
CommonResult
<
OAuth2AccessTokenVO
>
createAccessTokenResult
=
oauth2Rpc
.
createAccessToken
(
new
OAuth2CreateAccessTokenDTO
().
setUserId
(
verifyPasswordResult
.
getData
().
getId
())
.
setUserType
(
UserTypeEnum
.
ADMIN
.
getValue
()).
setCreateIp
(
ip
));
createAccessTokenResult
.
checkError
();
// 返回
return
AdminPassportConvert
.
INSTANCE
.
convert
(
verifyPasswordResult
.
getData
(),
createAccessTokenResult
.
getData
());
}
}
management-web-app/src/main/resources/application-dev.yml
0 → 100644
浏览文件 @
bedaaf09
spring
:
# Spring Cloud 配置项
cloud
:
nacos
:
# Spring Cloud Nacos Discovery 配置项
discovery
:
server-addr
:
400-infra.server.iocoder.cn:8848
# Nacos 服务器地址
namespace
:
dev
# Nacos 命名空间
# Dubbo 配置项
dubbo
:
# Dubbo 注册中心
registry
:
address
:
spring-cloud://400-infra.server.iocoder.cn:8848
# 指定 Dubbo 服务注册中心的地址
management-web-app/src/main/resources/application-local.yml
0 → 100644
浏览文件 @
bedaaf09
spring
:
# Spring Cloud 配置项
cloud
:
nacos
:
# Spring Cloud Nacos Discovery 配置项
discovery
:
server-addr
:
400-infra.server.iocoder.cn:8848
# Nacos 服务器地址
namespace
:
local
# Nacos 命名空间
# Dubbo 配置项
dubbo
:
# Dubbo 注册中心
registry
:
address
:
spring-cloud://400-infra.server.iocoder.cn:8848
# 指定 Dubbo 服务注册中心的地址
management-web-app/src/main/resources/application.yml
0 → 100644
浏览文件 @
bedaaf09
# 服务器的配置项
server
:
port
:
18083
servlet
:
context-path
:
/management-api/
spring
:
# Application 的配置项
application
:
name
:
management-web
# Profile 的配置项
profiles
:
active
:
local
# Dubbo 配置项
dubbo
:
# Spring Cloud Alibaba Dubbo 专属配置
cloud
:
subscribed-services
:
'
user-service,
system-service'
# 设置订阅的应用列表,默认为 * 订阅所有应用
# Dubbo 服务消费者的配置
consumer
:
timeout
:
10000
UserSmsCodeRpc
:
version
:
1.0.0
UserRpc
:
version
:
1.0.0
OAuth2Rpc
:
version
:
1.0.0
AdminRpc
:
version
:
1.0.0
pom.xml
浏览文件 @
bedaaf09
...
...
@@ -29,6 +29,8 @@
<module>
user-service-project
</module>
<module>
user-web-app
</module>
<module>
system-service-project
</module>
<module>
management-web-app
</module>
<module>
shop-web-app
</module>
</modules>
<packaging>
pom
</packaging>
...
...
shop-web-app/pom.xml
0 → 100644
浏览文件 @
bedaaf09
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
onemall
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
shop-web-app
</artifactId>
<description>
商城,用于用户购物
</description>
</project>
system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/enums/SystemErrorCodeEnum.java
浏览文件 @
bedaaf09
...
...
@@ -25,9 +25,8 @@ public enum SystemErrorCodeEnum implements ServiceExceptionUtil.Enumerable<Syste
// ========== 管理员模块 1002002000 ==========
ADMIN_NOT_FOUND
(
1002002000
,
"管理员不存在"
),
// 废弃 ADMIN_USERNAME_NOT_REGISTERED(1002002000, "账号不存在"),
// 废弃 ADMIN_PASSWORD_ERROR(1002002001, "密码不正确"),
// ADMIN_IS_DISABLE(1002002002, "账号被禁用"),
ADMIN_PASSWORD_ERROR
(
1002002001
,
"密码不正确"
),
ADMIN_IS_DISABLE
(
1002002002
,
"账号被禁用"
),
// ADMIN_USERNAME_EXISTS(1002002002, "账号已经存在"),
// ADMIN_STATUS_EQUALS(1002002003, "账号已经是该状态"),
// ADMIN_DELETE_ONLY_DISABLE(1002002004, "只有关闭的账号才可以删除"),
...
...
system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/rpc/admin/AdminRpc.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
rpc
.
admin
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.systemservice.rpc.admin.dto.AdminVerifyPasswordDTO
;
import
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO
;
/**
* 管理员 RPC 接口
*/
public
interface
AdminRpc
{
CommonResult
<
AdminVO
>
verifyPassword
(
AdminVerifyPasswordDTO
verifyPasswordDTO
);
}
system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/rpc/admin/dto/AdminVerifyPasswordDTO.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
rpc
.
admin
.
dto
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Pattern
;
/**
* 管理员校验密码 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
AdminVerifyPasswordDTO
{
/**
* 用户名
*/
@NotEmpty
(
message
=
"登陆账号不能为空"
)
@Length
(
min
=
5
,
max
=
16
,
message
=
"账号长度为 5-16 位"
)
@Pattern
(
regexp
=
"^[A-Za-z0-9]+$"
,
message
=
"账号格式为数字以及字母"
)
private
String
username
;
/**
* 密码
*/
@NotEmpty
(
message
=
"密码不能为空"
)
@Length
(
min
=
4
,
max
=
16
,
message
=
"密码长度为 4-16 位"
)
private
String
password
;
/**
* IP
*/
@NotEmpty
(
message
=
"IP 不能为空"
)
private
String
ip
;
}
system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/rpc/admin/vo/AdminVO.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
rpc
.
admin
.
vo
;
import
cn.iocoder.mall.systemservice.enums.admin.AdminStatusEnum
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
/**
* 管理员 DO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
AdminVO
{
/**
* 管理员编号
*/
private
Integer
id
;
/**
* 真实名字
*/
private
String
name
;
/**
* 部门编号
*/
private
Integer
departmentId
;
/**
* 在职状态
*
* 枚举 {@link AdminStatusEnum}
*/
private
Integer
status
;
/**
* 登陆账号
*/
private
String
username
;
}
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/convert/admin/AdminConvert.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
convert
.
admin
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.systemservice.dal.mysql.dataobject.admin.AdminDO
;
import
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO
;
import
cn.iocoder.mall.systemservice.service.admin.bo.AdminBO
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.factory.Mappers
;
@Mapper
public
interface
AdminConvert
{
AdminConvert
INSTANCE
=
Mappers
.
getMapper
(
AdminConvert
.
class
);
AdminBO
convert
(
AdminDO
bean
);
@Mapping
(
source
=
"records"
,
target
=
"list"
)
PageResult
<
AdminBO
>
convertPage
(
IPage
<
AdminDO
>
bean
);
AdminVO
convert
(
AdminBO
adminBO
);
}
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/convert/package-info.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
systemservice
.
convert
;
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/manager/admin/AdminManager.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
manager
.
admin
;
import
cn.iocoder.mall.systemservice.convert.admin.AdminConvert
;
import
cn.iocoder.mall.systemservice.rpc.admin.dto.AdminVerifyPasswordDTO
;
import
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO
;
import
cn.iocoder.mall.systemservice.service.admin.AdminService
;
import
cn.iocoder.mall.systemservice.service.admin.bo.AdminBO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Service
public
class
AdminManager
{
@Autowired
private
AdminService
adminService
;
public
AdminVO
verifyPassword
(
AdminVerifyPasswordDTO
verifyPasswordDTO
)
{
AdminBO
adminBO
=
adminService
.
verifyPassword
(
verifyPasswordDTO
.
getUsername
(),
verifyPasswordDTO
.
getPassword
(),
verifyPasswordDTO
.
getIp
());
return
AdminConvert
.
INSTANCE
.
convert
(
adminBO
);
}
}
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/manager/package-info.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
systemservice
.
manager
;
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/rpc/admin/AdminRpcImpl.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
rpc
.
admin
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.systemservice.manager.admin.AdminManager
;
import
cn.iocoder.mall.systemservice.rpc.admin.dto.AdminVerifyPasswordDTO
;
import
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO
;
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.AdminRpc.version}"
,
validation
=
"false"
)
public
class
AdminRpcImpl
implements
AdminRpc
{
@Autowired
private
AdminManager
adminManager
;
@Override
public
CommonResult
<
AdminVO
>
verifyPassword
(
AdminVerifyPasswordDTO
verifyPasswordDTO
)
{
return
success
(
adminManager
.
verifyPassword
(
verifyPasswordDTO
));
}
}
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/rpc/package-info.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
systemservice
.
rpc
;
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/admin/AdminService.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
service
.
admin
;
import
cn.iocoder.common.framework.util.DigestUtils
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.systemservice.convert.admin.AdminConvert
;
import
cn.iocoder.mall.systemservice.dal.mysql.dataobject.admin.AdminDO
;
import
cn.iocoder.mall.systemservice.dal.mysql.mapper.admin.AdminMapper
;
import
cn.iocoder.mall.systemservice.enums.SystemErrorCodeEnum
;
import
cn.iocoder.mall.systemservice.enums.admin.AdminStatusEnum
;
import
cn.iocoder.mall.systemservice.service.admin.bo.AdminBO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Service
public
class
AdminService
{
@Autowired
private
AdminMapper
adminMapper
;
public
AdminBO
verifyPassword
(
String
username
,
String
password
,
String
ip
)
{
AdminDO
adminDO
=
adminMapper
.
selectByUsername
(
username
);
if
(
adminDO
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ADMIN_NOT_FOUND
);
}
// 校验密码是否正确
String
encodedPassword
=
DigestUtils
.
bcrypt
(
password
,
adminDO
.
getPasswordSalt
());
if
(
encodedPassword
.
equals
(
adminDO
.
getPassword
()))
{
// TODO 需要补充密码错误上限
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ADMIN_PASSWORD_ERROR
);
}
// 账号被禁用
if
(!
AdminStatusEnum
.
ACTIVE
.
getStatus
().
equals
(
adminDO
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ADMIN_IS_DISABLE
);
}
// 返回
return
AdminConvert
.
INSTANCE
.
convert
(
adminDO
);
}
}
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/admin/bo/AdminBO.java
0 → 100644
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
systemservice
.
service
.
admin
.
bo
;
import
cn.iocoder.mall.systemservice.dal.mysql.dataobject.admin.DepartmentDO
;
import
cn.iocoder.mall.systemservice.enums.admin.AdminStatusEnum
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
/**
* 管理员信息 BO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
AdminBO
{
/**
* 管理员编号
*/
private
Integer
id
;
/**
* 真实名字
*/
private
String
name
;
/**
* 部门编号
*
* 关联 {@link DepartmentDO#getId()}
*/
private
Integer
departmentId
;
/**
* 在职状态
*
* 枚举 {@link AdminStatusEnum}
*/
private
Integer
status
;
/**
* 登陆账号
*/
private
String
username
;
}
system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/package-info.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
systemservice
.
service
;
system-service-project/system-service-app/src/main/resources/application.yaml
浏览文件 @
bedaaf09
...
...
@@ -35,3 +35,5 @@ dubbo:
filter
:
-exception
OAuth2Rpc
:
version
:
1.0.0
AdminRpc
:
version
:
1.0.0
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/AdminServiceImpl.java
浏览文件 @
bedaaf09
...
...
@@ -11,19 +11,6 @@ import org.springframework.stereotype.Service;
@Service
public
class
AdminServiceImpl
implements
AdminService
{
@Autowired
private
AdminMapper
adminMapper
;
@Override
public
AdminBO
getAdmin
(
Integer
id
)
{
return
AdminConvert
.
INSTANCE
.
convert
(
adminMapper
.
selectById
(
id
));
}
@Override
public
AdminBO
getAdminByAccountId
(
Integer
accountId
)
{
return
AdminConvert
.
INSTANCE
.
convert
(
adminMapper
.
selectByAccountId
(
accountId
));
}
@Override
public
PageResult
<
AdminBO
>
getAdminPage
(
AdminPageDTO
pageDTO
)
{
return
AdminConvert
.
INSTANCE
.
convertPage
(
adminMapper
.
selectPage
(
pageDTO
));
...
...
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/UserService.java
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
system
.
biz
.
service
.
user
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.system.biz.bo.user.UserAuthenticateBO
;
import
cn.iocoder.mall.system.biz.bo.user.UserBO
;
import
cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2MobileCodeAuthenticateDTO
;
import
cn.iocoder.mall.system.biz.dto.user.UserPageDTO
;
import
cn.iocoder.mall.system.biz.dto.user.UserUpdateDTO
;
import
cn.iocoder.mall.system.biz.dto.user.UserUpdateStatusDTO
;
import
org.springframework.validation.annotation.Validated
;
import
javax.validation.Valid
;
/**
...
...
@@ -16,10 +15,6 @@ import javax.validation.Valid;
@Validated
public
interface
UserService
{
UserAuthenticateBO
authenticate
(
OAuth2MobileCodeAuthenticateDTO
authenticateDTO
);
UserBO
getUserByAccountId
(
Integer
accountId
);
/**
* 根据条件分页获取用户列表
* @param userPageDTO
...
...
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/UserServiceImpl.java
浏览文件 @
bedaaf09
...
...
@@ -27,30 +27,6 @@ public class UserServiceImpl implements UserService {
@Autowired
private
UserMapper
userMapper
;
@Autowired
private
OAuth2Service
oAuth2Service
;
@Override
@Transactional
public
UserAuthenticateBO
authenticate
(
OAuth2MobileCodeAuthenticateDTO
authenticateDTO
)
{
// 执行认证
OAuth2AuthenticateBO
accessTokenBO
=
oAuth2Service
.
authenticate
(
authenticateDTO
);
// 获得用户
UserDO
userDO
=
userMapper
.
selectById
(
accessTokenBO
.
getAccountId
());
if
(
userDO
==
null
)
{
userDO
=
this
.
creatUser
(
accessTokenBO
.
getAccountId
());
}
UserBO
userBO
=
UserConvert
.
INSTANCE
.
convert
(
userDO
);
// 拼装返回
return
UserConvert
.
INSTANCE
.
convert
(
userBO
,
accessTokenBO
);
}
@Override
public
UserBO
getUserByAccountId
(
Integer
accountId
)
{
UserDO
userDO
=
userMapper
.
selectById
(
accountId
);
return
UserConvert
.
INSTANCE
.
convert
(
userDO
);
}
/**
* 根据条件分页获取用户列表
* @param userPageDTO
...
...
@@ -109,12 +85,4 @@ public class UserServiceImpl implements UserService {
return
true
;
}
private
UserDO
creatUser
(
Integer
accountId
)
{
UserDO
user
=
new
UserDO
();
user
.
setAccountId
(
accountId
);
user
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
userMapper
.
insert
(
user
);
return
user
;
}
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/oauth2/AdminsOAuth2Controller.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
system
.
rest
.
controller
.
oauth2
;
import
cn.iocoder.common.framework.enums.MallConstants
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.security.core.annotation.RequiresNone
;
import
cn.iocoder.mall.system.biz.bo.admin.AdminBO
;
import
cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AuthenticateBO
;
import
cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2UsernameAuthenticateDTO
;
import
cn.iocoder.mall.system.biz.service.admin.AdminService
;
import
cn.iocoder.mall.system.biz.service.oauth2.OAuth2Service
;
import
cn.iocoder.mall.system.rest.convert.oauth2.AdminsOAuth2Convert
;
import
cn.iocoder.mall.system.rest.request.oauth2.AdminsOAuth2UsernameAuthenticateRequest
;
import
cn.iocoder.mall.system.rest.response.oauth2.AdminsOAuth2AuthenticateResponse
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
static
cn
.
iocoder
.
mall
.
system
.
biz
.
enums
.
SystemErrorCodeEnum
.*;
@RestController
@RequestMapping
(
MallConstants
.
ROOT_PATH_ADMIN
+
"/oauth2"
)
@Api
(
tags
=
"管理员 - OAuth2 API"
)
public
class
AdminsOAuth2Controller
{
@Autowired
private
OAuth2Service
oauth2Service
;
@Autowired
private
AdminService
adminService
;
@PostMapping
(
"/username-authenticate"
)
@ApiOperation
(
"用户名认证(登陆)"
)
@RequiresNone
public
CommonResult
<
AdminsOAuth2AuthenticateResponse
>
usernameAuthenticate
(
AdminsOAuth2UsernameAuthenticateRequest
request
)
{
// 执行认证
OAuth2UsernameAuthenticateDTO
authenticateDTO
=
AdminsOAuth2Convert
.
INSTANCE
.
convert
(
request
);
OAuth2AuthenticateBO
accessTokenBO
=
oauth2Service
.
authenticate
(
authenticateDTO
);
// 获得 Admin 信息
AdminBO
adminBO
=
adminService
.
getAdmin
(
accessTokenBO
.
getAccountId
());
if
(
adminBO
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
ADMIN_NOT_FOUND
);
}
// 转换返回
return
CommonResult
.
success
(
AdminsOAuth2Convert
.
INSTANCE
.
convert
(
adminBO
,
accessTokenBO
)
);
}
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/oauth2/UsersOAuth2Controller.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
system
.
rest
.
controller
.
oauth2
;
import
cn.iocoder.common.framework.enums.MallConstants
;
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.user.UserService
;
import
io.swagger.annotations.Api
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@RequestMapping
(
MallConstants
.
ROOT_PATH_USER
+
"/oauth2"
)
@Api
(
tags
=
"用户 - OAuth2 API"
)
public
class
UsersOAuth2Controller
{
@Autowired
private
OAuth2Service
oauth2Service
;
@Autowired
private
UserService
userService
;
@Autowired
private
OAuth2MobileCodeService
oauth2MobileCodeService
;
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/oauth2/UsersOAuth2MobileCodeAuthenticateRequest.java
deleted
100644 → 0
浏览文件 @
ee6fa2b8
package
cn
.
iocoder
.
mall
.
system
.
rest
.
request
.
oauth2
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Pattern
;
@ApiModel
(
"用户 - OAuth2 模块 - 手机验证码认证请求"
)
@Data
@Accessors
(
chain
=
true
)
public
class
UsersOAuth2MobileCodeAuthenticateRequest
{
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
,
example
=
"15601691300"
)
@NotEmpty
(
message
=
"手机号不能为空"
)
@Length
(
min
=
11
,
max
=
11
,
message
=
"账号长度为 11 位"
)
@Pattern
(
regexp
=
"^[0-9]+$"
,
message
=
"手机号必须都是数字"
)
private
String
mobile
;
@ApiModelProperty
(
value
=
"手机验证码"
,
required
=
true
,
example
=
"1024"
)
@NotEmpty
(
message
=
"手机验证码不能为空"
)
@Length
(
min
=
4
,
max
=
6
,
message
=
"手机验证码长度为 4-6 位"
)
@Pattern
(
regexp
=
"^[0-9]+$"
,
message
=
"手机验证码必须都是数字"
)
private
String
code
;
}
user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/passport/UserPassportController.java
浏览文件 @
bedaaf09
...
...
@@ -6,6 +6,7 @@ import cn.iocoder.mall.userweb.controller.passport.dto.UserPassportLoginBySmsDTO
import
cn.iocoder.mall.userweb.controller.passport.dto.UserPassportSendSmsCodeDTO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.UserPassportVO
;
import
cn.iocoder.mall.userweb.manager.passport.UserPassportManager
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -16,6 +17,7 @@ import javax.servlet.http.HttpServletRequest;
import
static
cn
.
iocoder
.
common
.
framework
.
vo
.
CommonResult
.
success
;
@Api
(
tags
=
"用户 Passport API"
)
@RestController
@RequestMapping
(
"/passport"
)
public
class
UserPassportController
{
...
...
user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/passport/dto/UserPassportLoginBySmsDTO.java
浏览文件 @
bedaaf09
...
...
@@ -5,8 +5,10 @@ import io.swagger.annotations.ApiModel;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Pattern
;
import
java.io.Serializable
;
@ApiModel
(
"用户短信验证码登陆 DTO"
)
...
...
@@ -14,11 +16,15 @@ import java.io.Serializable;
@Accessors
(
chain
=
true
)
public
class
UserPassportLoginBySmsDTO
implements
Serializable
{
@ApiModelProperty
(
value
=
"手机号"
,
example
=
"15601691234"
)
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
,
example
=
"15601691300"
)
@NotEmpty
(
message
=
"手机号不能为空"
)
@Mobile
private
String
mobile
;
@ApiModelProperty
(
value
=
"验证码"
,
example
=
"1234"
)
@NotNull
(
message
=
"验证码不能为空"
)
@ApiModelProperty
(
value
=
"手机验证码"
,
required
=
true
,
example
=
"1024"
)
@NotEmpty
(
message
=
"手机验证码不能为空"
)
@Length
(
min
=
4
,
max
=
6
,
message
=
"手机验证码长度为 4-6 位"
)
@Pattern
(
regexp
=
"^[0-9]+$"
,
message
=
"手机验证码必须都是数字"
)
private
String
code
;
}
user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/passport/vo/UserPassportVO.java
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
userweb
.
controller
.
passport
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 用户通信证信息
*/
@ApiModel
(
"用户通信证信息 VO"
)
@Data
@Accessors
(
chain
=
true
)
public
class
UserPassportVO
{
/**
* 认证信息
*/
@ApiModel
(
"认证信息"
)
@Data
@Accessors
(
chain
=
true
)
public
static
class
Authentication
{
/**
* 访问令牌
*/
@ApiModelProperty
(
value
=
"访问令牌"
,
required
=
true
,
example
=
"001e8f49b20e47f7b3a2de774497cd50"
)
private
String
accessToken
;
/**
* 刷新令牌
*/
@ApiModelProperty
(
value
=
"刷新令牌"
,
required
=
true
,
example
=
"001e8f49b20e47f7b3a2de774497cd50"
)
private
String
refreshToken
;
/**
* 过期时间
*/
@ApiModelProperty
(
value
=
"过期时间"
,
required
=
true
)
private
Date
expiresTime
;
}
/**
* 用户信息
*/
@ApiModel
(
"用户信息"
)
@Data
@Accessors
(
chain
=
true
)
public
static
class
User
{
/**
* 用户编号
*/
@ApiModelProperty
(
value
=
"用户编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
/**
* 昵称
*/
@ApiModelProperty
(
value
=
"用户昵称"
,
required
=
true
,
example
=
"小王"
)
private
String
nickname
;
/**
* 头像
*/
@ApiModelProperty
(
value
=
"用户头像"
,
required
=
true
,
example
=
"http://www.iocoder.cn/image"
)
private
String
avatar
;
}
...
...
user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/user/UserController.java
浏览文件 @
bedaaf09
package
cn
.
iocoder
.
mall
.
userweb
.
controller
.
user
;
import
io.swagger.annotations.Api
;
@Api
(
tags
=
"用户信息 API"
)
public
class
UserController
{
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论