Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
4
Issues
4
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
段启岩
beyond-clouds
Commits
77ae64b1
Commit
77ae64b1
authored
Jan 16, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用户注册完成
parent
7ce70446
Show whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
669 additions
and
39 deletions
+669
-39
pom.xml
+22
-0
src/main/java/cn/meteor/beyondclouds/common/enums/ErrorCode.java
+1
-1
src/main/java/cn/meteor/beyondclouds/common/enums/RedisErrorCode.java
+29
-0
src/main/java/cn/meteor/beyondclouds/common/enums/SmsErrorCode.java
+30
-0
src/main/java/cn/meteor/beyondclouds/common/exception/RedisOperationException.java
+17
-0
src/main/java/cn/meteor/beyondclouds/common/exception/SmsException.java
+18
-0
src/main/java/cn/meteor/beyondclouds/common/helper/IRedisHelper.java
+85
-0
src/main/java/cn/meteor/beyondclouds/common/helper/ISmsHelper.java
+18
-0
src/main/java/cn/meteor/beyondclouds/common/helper/RedisHelperImpl.java
+105
-0
src/main/java/cn/meteor/beyondclouds/common/helper/SmsHelperImpl.java
+66
-0
src/main/java/cn/meteor/beyondclouds/config/WebMvcConfig.java
+2
-0
src/main/java/cn/meteor/beyondclouds/core/IErrorCode.java
+1
-1
src/main/java/cn/meteor/beyondclouds/core/api/Response.java
+1
-0
src/main/java/cn/meteor/beyondclouds/core/emuns/AuthorizationErrorCode.java
+1
-1
src/main/java/cn/meteor/beyondclouds/core/exception/AuthorizationException.java
+1
-1
src/main/java/cn/meteor/beyondclouds/core/exception/ServiceException.java
+1
-1
src/main/java/cn/meteor/beyondclouds/core/interceptor/SubjectInterceptor.java
+1
-1
src/main/java/cn/meteor/beyondclouds/core/redis/RedisKey.java
+15
-0
src/main/java/cn/meteor/beyondclouds/modules/sms/SmsApi.java
+41
-0
src/main/java/cn/meteor/beyondclouds/modules/sms/service/ISmsService.java
+18
-0
src/main/java/cn/meteor/beyondclouds/modules/sms/service/impl/SmsServiceImpl.java
+38
-0
src/main/java/cn/meteor/beyondclouds/modules/user/api/UserApi.java
+2
-15
src/main/java/cn/meteor/beyondclouds/modules/user/enums/AuthenticationErrorCode.java
+1
-1
src/main/java/cn/meteor/beyondclouds/modules/user/enums/UserErrorCode.java
+3
-3
src/main/java/cn/meteor/beyondclouds/modules/user/exception/AuthenticationServiceException.java
+1
-1
src/main/java/cn/meteor/beyondclouds/modules/user/exception/UserServiceException.java
+1
-1
src/main/java/cn/meteor/beyondclouds/modules/user/form/UserRegisterFrom.java
+3
-0
src/main/java/cn/meteor/beyondclouds/modules/user/service/IUserService.java
+3
-2
src/main/java/cn/meteor/beyondclouds/modules/user/service/impl/AuthenticationServiceImpl.java
+4
-2
src/main/java/cn/meteor/beyondclouds/modules/user/service/impl/UserServiceImpl.java
+21
-7
src/main/java/cn/meteor/beyondclouds/util/JsonUtils.java
+30
-0
src/main/java/cn/meteor/beyondclouds/util/JwtUtils.java
+1
-1
src/main/java/cn/meteor/beyondclouds/util/Md5Utils.java
+32
-0
src/main/java/cn/meteor/beyondclouds/util/VerifyCodeUtils.java
+24
-0
src/test/java/cn/meteor/beyondclouds/common/helper/IRedisHelperTest.java
+32
-0
No files found.
pom.xml
View file @
77ae64b1
...
@@ -66,6 +66,21 @@
...
@@ -66,6 +66,21 @@
</dependency>
</dependency>
<!-- JWT end -->
<!-- JWT end -->
<!-- Redis start -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
</dependency>
<!-- Redis end -->
<!-- 阿里sdk start -->
<dependency>
<groupId>
com.aliyun
</groupId>
<artifactId>
aliyun-java-sdk-core
</artifactId>
<version>
4.1.0
</version>
</dependency>
<!-- 阿里sdk end -->
<dependency>
<dependency>
<groupId>
mysql
</groupId>
<groupId>
mysql
</groupId>
...
@@ -82,6 +97,13 @@
...
@@ -82,6 +97,13 @@
<artifactId>
lombok
</artifactId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
<optional>
true
</optional>
</dependency>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<artifactId>
spring-boot-starter-test
</artifactId>
...
...
src/main/java/cn/meteor/beyondclouds/common/enums/ErrorCode.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
enums
;
package
cn
.
meteor
.
beyondclouds
.
common
.
enums
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
/**
/**
...
...
src/main/java/cn/meteor/beyondclouds/common/enums/RedisErrorCode.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
enums
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
* Redis操作相关错误
* @author meteor
*/
public
enum
RedisErrorCode
implements
IErrorCode
{
SET_FAILURE
(
10001
,
"存储失败"
);
RedisErrorCode
(
long
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
private
long
code
;
private
String
msg
;
@Override
public
long
code
()
{
return
code
;
}
@Override
public
String
msg
()
{
return
msg
;
}
}
src/main/java/cn/meteor/beyondclouds/common/enums/SmsErrorCode.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
enums
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
* @author meteor
*/
public
enum
SmsErrorCode
implements
IErrorCode
{
SERVER_ERROR
(
2001
,
"发送短信时阿里的服务器出现了异常"
),
CLIENT_ERROR
(
2002
,
"发送短信时自己的服务器出现了异常"
),
SEND_FAILURE
(
2003
,
"短信发送失败"
);
private
long
code
;
private
String
msg
;
SmsErrorCode
(
long
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
@Override
public
long
code
()
{
return
code
;
}
@Override
public
String
msg
()
{
return
msg
;
}
}
src/main/java/cn/meteor/beyondclouds/common/exception/RedisOperationException.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
exception
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
/**
* @author meteor
*/
public
class
RedisOperationException
extends
ServiceException
{
public
RedisOperationException
(
long
errorCode
,
String
errorMsg
)
{
super
(
errorCode
,
errorMsg
);
}
public
RedisOperationException
(
IErrorCode
errorCode
)
{
super
(
errorCode
);
}
}
src/main/java/cn/meteor/beyondclouds/common/exception/SmsException.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
exception
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
/**
* 短信相关异常
* @author meteor
*/
public
class
SmsException
extends
ServiceException
{
public
SmsException
(
long
errorCode
,
String
errorMsg
)
{
super
(
errorCode
,
errorMsg
);
}
public
SmsException
(
IErrorCode
errorCode
)
{
super
(
errorCode
);
}
}
src/main/java/cn/meteor/beyondclouds/common/helper/IRedisHelper.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
helper
;
import
cn.meteor.beyondclouds.common.exception.RedisOperationException
;
/**
* Redis辅助类
* @author meteor
*/
public
interface
IRedisHelper
{
/**
* 设置缓存失效时间
* @param key 键
* @param seconds 时间(秒)
* @return
*/
boolean
expire
(
String
key
,
long
seconds
);
/**
* 根据 key 获取过期时间
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
long
getExpire
(
String
key
);
/**
* 判断key是否存在
* @param key 键
* @return true 存在 false不存在
*/
boolean
hasKey
(
String
key
);
/**
* 删除缓存
* @param key 可以传一个值 或多个
*/
void
del
(
String
...
key
);
/**
* 根据key获取缓存的对象
* @param key
* @param type
* @param <T>
* @return
*/
<
T
>
T
get
(
String
key
,
Class
<
T
>
type
);
/**
* 根据key获取缓存的字符串
* @param key
* @return
*/
String
get
(
String
key
);
/**
* 存入对象
* @param key 键
* @param value 值
*/
void
set
(
String
key
,
Object
value
)
throws
RedisOperationException
;
/**
* 存入对象
* @param key 键
* @param value 值
* @param seconds 有效期
*/
void
set
(
String
key
,
Object
value
,
long
seconds
)
throws
RedisOperationException
;
/**
* 递增
* @param key 键
* @param delta 要增加几(大于0)
* @return
*/
long
increment
(
String
key
,
long
delta
);
/**
* 递减
* @param key 键
* @param delta 要减少几(小于0)
* @return
*/
long
decrement
(
String
key
,
long
delta
);
}
src/main/java/cn/meteor/beyondclouds/common/helper/ISmsHelper.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
helper
;
import
cn.meteor.beyondclouds.common.exception.SmsException
;
/**
* 短信辅助类
* @author meteor
*/
public
interface
ISmsHelper
{
/**
* 发送验证码
* @param mobile
* @param verifyCode
*/
void
sendVerifyCode
(
String
mobile
,
String
verifyCode
)
throws
SmsException
;
}
src/main/java/cn/meteor/beyondclouds/common/helper/RedisHelperImpl.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
helper
;
import
cn.meteor.beyondclouds.common.enums.RedisErrorCode
;
import
cn.meteor.beyondclouds.common.exception.RedisOperationException
;
import
cn.meteor.beyondclouds.util.JsonUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Component
;
import
java.io.IOException
;
import
java.util.Arrays
;
import
java.util.concurrent.TimeUnit
;
/**
* @author meteor
*/
@Component
public
class
RedisHelperImpl
implements
IRedisHelper
{
private
StringRedisTemplate
redisTemplate
;
@Autowired
public
void
setRedisTemplate
(
StringRedisTemplate
redisTemplate
)
{
this
.
redisTemplate
=
redisTemplate
;
}
@Override
public
boolean
expire
(
String
key
,
long
seconds
)
{
return
redisTemplate
.
expire
(
key
,
seconds
,
TimeUnit
.
SECONDS
);
}
@Override
public
long
getExpire
(
String
key
)
{
return
redisTemplate
.
getExpire
(
key
,
TimeUnit
.
SECONDS
);
}
@Override
public
boolean
hasKey
(
String
key
)
{
return
redisTemplate
.
hasKey
(
key
);
}
@Override
public
void
del
(
String
...
key
)
{
if
(
key
.
length
==
1
)
{
redisTemplate
.
delete
(
key
[
0
]);
}
else
{
redisTemplate
.
delete
(
Arrays
.
asList
(
key
));
}
}
@Override
public
<
T
>
T
get
(
String
key
,
Class
<
T
>
type
)
{
String
jsonValue
=
get
(
key
);
try
{
return
JsonUtils
.
toBean
(
jsonValue
,
type
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
@Override
public
String
get
(
String
key
)
{
return
(
String
)
redisTemplate
.
opsForValue
().
get
(
key
);
}
@Override
public
void
set
(
String
key
,
Object
value
)
throws
RedisOperationException
{
try
{
if
(
value
instanceof
String
)
{
redisTemplate
.
opsForValue
().
set
(
key
,
(
String
)
value
);
}
else
{
redisTemplate
.
opsForValue
().
set
(
key
,
JsonUtils
.
toJson
(
value
));
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
RedisOperationException
(
RedisErrorCode
.
SET_FAILURE
);
}
}
@Override
public
void
set
(
String
key
,
Object
value
,
long
seconds
)
throws
RedisOperationException
{
try
{
if
(
value
instanceof
String
)
{
redisTemplate
.
opsForValue
().
set
(
key
,
(
String
)
value
,
seconds
,
TimeUnit
.
SECONDS
);
}
else
{
redisTemplate
.
opsForValue
().
set
(
key
,
JsonUtils
.
toJson
(
value
),
seconds
,
TimeUnit
.
SECONDS
);
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
RedisOperationException
(
RedisErrorCode
.
SET_FAILURE
);
}
}
@Override
public
long
increment
(
String
key
,
long
delta
)
{
return
redisTemplate
.
opsForValue
().
increment
(
key
,
delta
);
}
@Override
public
long
decrement
(
String
key
,
long
delta
)
{
return
redisTemplate
.
opsForValue
().
decrement
(
key
,
delta
);
}
}
src/main/java/cn/meteor/beyondclouds/common/helper/SmsHelperImpl.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
helper
;
import
cn.meteor.beyondclouds.common.enums.SmsErrorCode
;
import
cn.meteor.beyondclouds.common.exception.SmsException
;
import
cn.meteor.beyondclouds.util.JsonUtils
;
import
com.aliyuncs.CommonRequest
;
import
com.aliyuncs.CommonResponse
;
import
com.aliyuncs.DefaultAcsClient
;
import
com.aliyuncs.IAcsClient
;
import
com.aliyuncs.exceptions.ClientException
;
import
com.aliyuncs.exceptions.ServerException
;
import
com.aliyuncs.http.MethodType
;
import
com.aliyuncs.profile.DefaultProfile
;
import
org.springframework.stereotype.Component
;
import
java.io.IOException
;
import
java.util.Map
;
/**
* @author meteor
*/
@Component
public
class
SmsHelperImpl
implements
ISmsHelper
{
private
static
final
String
SMS_RESPONSE_DATA_KEY
=
"Code"
;
private
static
final
String
SMS_RESPONSE_DATA_VALUE_OK
=
"OK"
;
private
DefaultProfile
profile
=
DefaultProfile
.
getProfile
(
"cn-hangzhou"
,
"LTAIeHWeydaWT3ZZ"
,
"2FTWlODpzEZjsBQw10NO6SUBMwYOcL"
);
private
IAcsClient
client
=
new
DefaultAcsClient
(
profile
);
@Override
public
void
sendVerifyCode
(
String
mobile
,
String
verifyCode
)
throws
SmsException
{
CommonRequest
request
=
new
CommonRequest
();
request
.
setMethod
(
MethodType
.
POST
);
request
.
setDomain
(
"dysmsapi.aliyuncs.com"
);
request
.
setVersion
(
"2017-05-25"
);
request
.
setAction
(
"SendSms"
);
request
.
putQueryParameter
(
"RegionId"
,
"cn-hangzhou"
);
request
.
putQueryParameter
(
"PhoneNumbers"
,
mobile
);
request
.
putQueryParameter
(
"SignName"
,
"段启岩"
);
request
.
putQueryParameter
(
"TemplateCode"
,
"SMS_142384912"
);
request
.
putQueryParameter
(
"TemplateParam"
,
String
.
format
(
"{\"code\" : \"%s\"}"
,
verifyCode
));
try
{
CommonResponse
response
=
client
.
getCommonResponse
(
request
);
Map
data
=
JsonUtils
.
toBean
(
response
.
getData
(),
Map
.
class
);
if
(!
data
.
get
(
SMS_RESPONSE_DATA_KEY
).
equals
(
SMS_RESPONSE_DATA_VALUE_OK
))
{
throw
new
SmsException
(
SmsErrorCode
.
SEND_FAILURE
);
}
}
catch
(
ServerException
e
)
{
e
.
printStackTrace
();
throw
new
SmsException
(
SmsErrorCode
.
SERVER_ERROR
.
code
(),
e
.
getErrMsg
());
}
catch
(
ClientException
e
)
{
e
.
printStackTrace
();
throw
new
SmsException
(
SmsErrorCode
.
CLIENT_ERROR
.
code
(),
e
.
getErrMsg
());
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
public
static
void
main
(
String
[]
args
)
{
// new SmsHelperImpl().sendVerifyCode("13546386889", "");
}
}
src/main/java/cn/meteor/beyondclouds/config/WebMvcConfig.java
View file @
77ae64b1
...
@@ -32,6 +32,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
...
@@ -32,6 +32,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
.
addPathPatterns
(
"/**"
)
.
addPathPatterns
(
"/**"
)
.
excludePathPatterns
(
"/error"
)
.
excludePathPatterns
(
"/error"
)
.
excludePathPatterns
(
"/api/auth/**"
)
.
excludePathPatterns
(
"/api/auth/**"
)
.
excludePathPatterns
(
"/api/sms/**"
)
.
excludePathPatterns
(
"/api/user/register"
)
.
excludePathPatterns
(
"/swagger-resources/**"
,
"/webjars/**"
,
"/v2/**"
,
"/swagger-ui.html/**"
);
.
excludePathPatterns
(
"/swagger-resources/**"
,
"/webjars/**"
,
"/v2/**"
,
"/swagger-ui.html/**"
);
}
}
...
...
src/main/java/cn/meteor/beyondclouds/core/
api/
IErrorCode.java
→
src/main/java/cn/meteor/beyondclouds/core/IErrorCode.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
api
;
package
cn
.
meteor
.
beyondclouds
.
core
;
/**
/**
* 错误码接口
* 错误码接口
...
...
src/main/java/cn/meteor/beyondclouds/core/api/Response.java
View file @
77ae64b1
...
@@ -2,6 +2,7 @@ package cn.meteor.beyondclouds.core.api;
...
@@ -2,6 +2,7 @@ package cn.meteor.beyondclouds.core.api;
import
cn.meteor.beyondclouds.common.bean.FieldError
;
import
cn.meteor.beyondclouds.common.bean.FieldError
;
import
cn.meteor.beyondclouds.common.enums.ErrorCode
;
import
cn.meteor.beyondclouds.common.enums.ErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
import
lombok.Data
;
...
...
src/main/java/cn/meteor/beyondclouds/core/emuns/AuthorizationErrorCode.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
emuns
;
package
cn
.
meteor
.
beyondclouds
.
core
.
emuns
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
/**
* 授权错误码
* 授权错误码
...
...
src/main/java/cn/meteor/beyondclouds/core/exception/AuthorizationException.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
exception
;
package
cn
.
meteor
.
beyondclouds
.
core
.
exception
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
/**
* 授权异常
* 授权异常
...
...
src/main/java/cn/meteor/beyondclouds/core/exception/ServiceException.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
exception
;
package
cn
.
meteor
.
beyondclouds
.
core
.
exception
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
lombok.Data
;
import
lombok.Data
;
/**
/**
...
...
src/main/java/cn/meteor/beyondclouds/core/interceptor/SubjectInterceptor.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
interceptor
;
package
cn
.
meteor
.
beyondclouds
.
core
.
interceptor
;
import
cn.meteor.beyondclouds.
core.
util.JwtUtils
;
import
cn.meteor.beyondclouds.util.JwtUtils
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
import
cn.meteor.beyondclouds.core.constant.HttpRequestHeaderNames
;
import
cn.meteor.beyondclouds.core.constant.HttpRequestHeaderNames
;
import
cn.meteor.beyondclouds.core.constant.SysConstants
;
import
cn.meteor.beyondclouds.core.constant.SysConstants
;
...
...
src/main/java/cn/meteor/beyondclouds/core/redis/RedisKey.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
redis
;
/**
* Redis键常量
* @author meteor
*/
public
final
class
RedisKey
{
private
static
final
String
VERIFY_CODE_KEY_PREFIX
=
"vcode:"
;
public
static
String
VERIFY_CODE_KEY
(
String
mobile
)
{
return
VERIFY_CODE_KEY_PREFIX
+
mobile
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/sms/SmsApi.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
sms
;
import
cn.meteor.beyondclouds.common.exception.SmsException
;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
import
cn.meteor.beyondclouds.modules.sms.service.ISmsService
;
import
cn.meteor.beyondclouds.util.VerifyCodeUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* 短信Api
* @author meteor
*/
@RestController
@RequestMapping
(
"/api/sms"
)
public
class
SmsApi
{
private
ISmsService
smsService
;
@Autowired
public
void
setSmsService
(
ISmsService
smsService
)
{
this
.
smsService
=
smsService
;
}
@GetMapping
(
"/verifyCode"
)
public
Response
sendVerify
(
@RequestParam
(
"mobile"
)
String
mobile
)
{
try
{
smsService
.
sendVerifyCode
(
mobile
,
VerifyCodeUtils
.
randomVerifyCode
());
return
Response
.
success
();
}
catch
(
ServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
}
src/main/java/cn/meteor/beyondclouds/modules/sms/service/ISmsService.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
sms
.
service
;
import
cn.meteor.beyondclouds.common.exception.RedisOperationException
;
import
cn.meteor.beyondclouds.common.exception.SmsException
;
/**
* 短信业务类
* @author meteor
*/
public
interface
ISmsService
{
/**
* 发送验证码
* @param mobile
* @param randomVerifyCode
*/
void
sendVerifyCode
(
String
mobile
,
String
randomVerifyCode
)
throws
SmsException
,
RedisOperationException
;
}
src/main/java/cn/meteor/beyondclouds/modules/sms/service/impl/SmsServiceImpl.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
sms
.
service
.
impl
;
import
cn.meteor.beyondclouds.common.exception.RedisOperationException
;
import
cn.meteor.beyondclouds.common.exception.SmsException
;
import
cn.meteor.beyondclouds.common.helper.IRedisHelper
;
import
cn.meteor.beyondclouds.common.helper.ISmsHelper
;
import
cn.meteor.beyondclouds.core.redis.RedisKey
;
import
cn.meteor.beyondclouds.modules.sms.service.ISmsService
;
import
cn.meteor.beyondclouds.modules.user.enums.UserErrorCode
;
import
cn.meteor.beyondclouds.modules.user.exception.UserServiceException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* 短信业务实现
* @author meteor
*/
@Service
public
class
SmsServiceImpl
implements
ISmsService
{
private
ISmsHelper
smsHelper
;
private
IRedisHelper
redisHelper
;
@Autowired
public
void
setSmsHelper
(
ISmsHelper
smsHelper
,
IRedisHelper
redisHelper
)
{
this
.
smsHelper
=
smsHelper
;
this
.
redisHelper
=
redisHelper
;
}
@Override
public
void
sendVerifyCode
(
String
mobile
,
String
randomVerifyCode
)
throws
SmsException
,
RedisOperationException
{
//1. 发送短信
smsHelper
.
sendVerifyCode
(
mobile
,
randomVerifyCode
);
//2.存储短信到redis
redisHelper
.
set
(
RedisKey
.
VERIFY_CODE_KEY
(
mobile
),
randomVerifyCode
,
5
*
60
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/user/api/UserApi.java
View file @
77ae64b1
...
@@ -28,7 +28,7 @@ public class UserApi {
...
@@ -28,7 +28,7 @@ public class UserApi {
this
.
userService
=
userService
;
this
.
userService
=
userService
;
}
}
@PostMapping
(
"/"
)
@PostMapping
(
"/
register
"
)
public
Response
register
(
@RequestBody
@Valid
UserRegisterFrom
registerFrom
,
BindingResult
result
)
{
public
Response
register
(
@RequestBody
@Valid
UserRegisterFrom
registerFrom
,
BindingResult
result
)
{
if
(
result
.
hasErrors
())
{
if
(
result
.
hasErrors
())
{
...
@@ -36,7 +36,7 @@ public class UserApi {
...
@@ -36,7 +36,7 @@ public class UserApi {
}
}
try
{
try
{
userService
.
register
(
registerFrom
.
getMobile
(),
registerFrom
.
getPassword
());
userService
.
register
(
registerFrom
.
getMobile
(),
registerFrom
.
getPassword
()
,
registerFrom
.
getVerifyCode
()
);
return
Response
.
success
();
return
Response
.
success
();
}
catch
(
UserServiceException
e
)
{
}
catch
(
UserServiceException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -44,18 +44,5 @@ public class UserApi {
...
@@ -44,18 +44,5 @@ public class UserApi {
}
}
}
}
@GetMapping
(
""
)
public
Response
<
User
>
getUserInfo
(
@CurrentSubject
Subject
subject
)
{
User
user
=
userService
.
getById
(
subject
.
getId
());
return
Response
.
success
(
user
);
}
@PutMapping
(
"/nick/{nickName}"
)
public
Response
updateNick
(
@PathVariable
(
"nickName"
)
String
nickName
,
@CurrentSubject
Subject
subject
)
{
String
userId
=
subject
.
getId
();
userService
.
updateNickName
(
userId
,
nickName
);
return
Response
.
success
();
}
}
}
src/main/java/cn/meteor/beyondclouds/modules/user/enums/AuthenticationErrorCode.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
enums
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
enums
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
/**
* 认证相关错误码
* 认证相关错误码
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/enums/UserErrorCode.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
enums
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
enums
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
/**
* 用户相关错误码
* 用户相关错误码
...
@@ -11,8 +11,8 @@ public enum UserErrorCode implements IErrorCode {
...
@@ -11,8 +11,8 @@ public enum UserErrorCode implements IErrorCode {
/**
/**
* 手机号已经被注册//
* 手机号已经被注册//
*/
*/
MOBILE_REGISTERED
(
1001
,
"该手机号已被注册"
)
MOBILE_REGISTERED
(
1001
,
"该手机号已被注册"
)
,
;
REG_VERIFY_CODE_ERROR
(
1002
,
"验证码错误"
)
;
UserErrorCode
(
long
code
,
String
msg
)
{
UserErrorCode
(
long
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
code
=
code
;
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/exception/AuthenticationServiceException.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
exception
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
exception
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
/**
/**
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/exception/UserServiceException.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
exception
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
exception
;
import
cn.meteor.beyondclouds.core.
api.
IErrorCode
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
/**
/**
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/form/UserRegisterFrom.java
View file @
77ae64b1
...
@@ -15,4 +15,7 @@ public class UserRegisterFrom {
...
@@ -15,4 +15,7 @@ public class UserRegisterFrom {
@NotEmpty
(
message
=
"密码不能为空"
)
@NotEmpty
(
message
=
"密码不能为空"
)
private
String
password
;
private
String
password
;
@NotEmpty
(
message
=
"验证码不能为空"
)
private
String
verifyCode
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/user/service/IUserService.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
;
import
cn.meteor.beyondclouds.modules.user.bean.AuthenticationResult
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.exception.UserServiceException
;
import
cn.meteor.beyondclouds.modules.user.exception.UserServiceException
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
...
@@ -14,8 +13,10 @@ public interface IUserService extends IService<User> {
...
@@ -14,8 +13,10 @@ public interface IUserService extends IService<User> {
* 使用手机号注册用户
* 使用手机号注册用户
* @param mobile
* @param mobile
* @param password
* @param password
* @param verifyCode
* @exception UserServiceException
*/
*/
void
register
(
String
mobile
,
String
password
)
throws
UserServiceException
;
void
register
(
String
mobile
,
String
password
,
String
verifyCode
)
throws
UserServiceException
;
/**
/**
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/service/impl/AuthenticationServiceImpl.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
.
impl
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
.
impl
;
import
cn.meteor.beyondclouds.
core.
util.JwtUtils
;
import
cn.meteor.beyondclouds.util.JwtUtils
;
import
cn.meteor.beyondclouds.modules.user.bean.AuthenticationResult
;
import
cn.meteor.beyondclouds.modules.user.bean.AuthenticationResult
;
import
cn.meteor.beyondclouds.modules.user.entity.UserAuthLocal
;
import
cn.meteor.beyondclouds.modules.user.entity.UserAuthLocal
;
import
cn.meteor.beyondclouds.modules.user.enums.AuthenticationErrorCode
;
import
cn.meteor.beyondclouds.modules.user.enums.AuthenticationErrorCode
;
import
cn.meteor.beyondclouds.modules.user.exception.AuthenticationServiceException
;
import
cn.meteor.beyondclouds.modules.user.exception.AuthenticationServiceException
;
import
cn.meteor.beyondclouds.modules.user.service.IAuthenticationService
;
import
cn.meteor.beyondclouds.modules.user.service.IAuthenticationService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserAuthLocalService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserAuthLocalService
;
import
cn.meteor.beyondclouds.util.Md5Utils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -35,7 +36,8 @@ public class AuthenticationServiceImpl implements IAuthenticationService {
...
@@ -35,7 +36,8 @@ public class AuthenticationServiceImpl implements IAuthenticationService {
}
}
//2. 判断密码是否正确
//2. 判断密码是否正确
if
(!
password
.
equals
(
userAuthLocal
.
getPassword
()))
{
String
encodedPassword
=
Md5Utils
.
encode
(
password
);
if
(!
encodedPassword
.
equals
(
userAuthLocal
.
getPassword
()))
{
throw
new
AuthenticationServiceException
(
AuthenticationErrorCode
.
PASSWORD_NOT_MATCHED
);
throw
new
AuthenticationServiceException
(
AuthenticationErrorCode
.
PASSWORD_NOT_MATCHED
);
}
}
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/service/impl/UserServiceImpl.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
.
impl
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.user.bean.AuthenticationResult
;
import
cn.meteor.beyondclouds.common.helper.IRedisHelper
;
import
cn.meteor.beyondclouds.core.redis.RedisKey
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.UserAuthLocal
;
import
cn.meteor.beyondclouds.modules.user.entity.UserAuthLocal
;
import
cn.meteor.beyondclouds.modules.user.enums.UserErrorCode
;
import
cn.meteor.beyondclouds.modules.user.enums.UserErrorCode
;
...
@@ -8,11 +9,13 @@ import cn.meteor.beyondclouds.modules.user.exception.UserServiceException;
...
@@ -8,11 +9,13 @@ import cn.meteor.beyondclouds.modules.user.exception.UserServiceException;
import
cn.meteor.beyondclouds.modules.user.mapper.IUserMapper
;
import
cn.meteor.beyondclouds.modules.user.mapper.IUserMapper
;
import
cn.meteor.beyondclouds.modules.user.service.IUserAuthLocalService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserAuthLocalService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.util.Md5Utils
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
/**
/**
* @author meteor
* @author meteor
...
@@ -22,15 +25,26 @@ import org.springframework.stereotype.Service;
...
@@ -22,15 +25,26 @@ import org.springframework.stereotype.Service;
public
class
UserServiceImpl
extends
ServiceImpl
<
IUserMapper
,
User
>
implements
IUserService
{
public
class
UserServiceImpl
extends
ServiceImpl
<
IUserMapper
,
User
>
implements
IUserService
{
private
IUserAuthLocalService
userAuthLocalService
;
private
IUserAuthLocalService
userAuthLocalService
;
private
IRedisHelper
redisHelper
;
@Autowired
@Autowired
public
void
setUserAuthLocalService
(
IUserAuthLocalService
userAuthLocalService
)
{
public
void
setUserAuthLocalService
(
IUserAuthLocalService
userAuthLocalService
,
IRedisHelper
redisHelper
)
{
this
.
userAuthLocalService
=
userAuthLocalService
;
this
.
userAuthLocalService
=
userAuthLocalService
;
this
.
redisHelper
=
redisHelper
;
}
}
@Override
@Override
public
void
register
(
String
mobile
,
String
password
)
throws
UserServiceException
{
public
void
register
(
String
mobile
,
String
password
,
String
verifyCOde
)
throws
UserServiceException
{
//1. 检测该手机号是否被注册
//1.检查验证码是否正确
String
realVerifyCode
=
redisHelper
.
get
(
RedisKey
.
VERIFY_CODE_KEY
(
mobile
));
if
(
StringUtils
.
isEmpty
(
realVerifyCode
)
||
!
realVerifyCode
.
equals
(
verifyCOde
))
{
throw
new
UserServiceException
(
UserErrorCode
.
REG_VERIFY_CODE_ERROR
);
}
// 删除验证码
redisHelper
.
del
(
RedisKey
.
VERIFY_CODE_KEY
(
mobile
));
//2. 检测该手机号是否被注册
QueryWrapper
<
UserAuthLocal
>
queryWrapper
=
new
QueryWrapper
<>();
QueryWrapper
<
UserAuthLocal
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"mobile"
,
mobile
);
queryWrapper
.
eq
(
"mobile"
,
mobile
);
UserAuthLocal
userAuthLocal
=
userAuthLocalService
.
getOne
(
queryWrapper
);
UserAuthLocal
userAuthLocal
=
userAuthLocalService
.
getOne
(
queryWrapper
);
...
@@ -38,17 +52,17 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
...
@@ -38,17 +52,17 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
throw
new
UserServiceException
(
UserErrorCode
.
MOBILE_REGISTERED
);
throw
new
UserServiceException
(
UserErrorCode
.
MOBILE_REGISTERED
);
}
}
//
2
. 创建用户
//
3
. 创建用户
User
user
=
new
User
();
User
user
=
new
User
();
user
.
setNickName
(
"自动生成的昵称"
);
user
.
setNickName
(
"自动生成的昵称"
);
user
.
setSignature
(
"自动生成的默认签名"
);
user
.
setSignature
(
"自动生成的默认签名"
);
save
(
user
);
save
(
user
);
//
2
. 创建认证信息
//
4
. 创建认证信息
userAuthLocal
=
new
UserAuthLocal
();
userAuthLocal
=
new
UserAuthLocal
();
userAuthLocal
.
setUserId
(
user
.
getUserId
());
userAuthLocal
.
setUserId
(
user
.
getUserId
());
userAuthLocal
.
setMobile
(
mobile
);
userAuthLocal
.
setMobile
(
mobile
);
userAuthLocal
.
setPassword
(
password
);
userAuthLocal
.
setPassword
(
Md5Utils
.
encode
(
password
)
);
userAuthLocalService
.
save
(
userAuthLocal
);
userAuthLocalService
.
save
(
userAuthLocal
);
}
}
...
...
src/main/java/cn/meteor/beyondclouds/util/JsonUtils.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
util
;
import
com.fasterxml.jackson.core.JsonFactory
;
import
com.fasterxml.jackson.core.JsonGenerator
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
java.io.IOException
;
import
java.io.StringWriter
;
/**
* Json操作工具类
* @author meteor
*/
public
class
JsonUtils
{
private
static
ObjectMapper
mapper
=
new
ObjectMapper
();
public
static
String
toJson
(
Object
obj
)
throws
IOException
{
StringWriter
stringWriter
=
new
StringWriter
();
JsonGenerator
gen
=
new
JsonFactory
().
createGenerator
(
stringWriter
);
mapper
.
writeValue
(
gen
,
obj
);
gen
.
close
();
return
stringWriter
.
toString
();
}
public
static
<
T
>
T
toBean
(
String
jsonStr
,
Class
<
T
>
type
)
throws
IOException
{
return
mapper
.
readValue
(
jsonStr
,
type
);
}
}
src/main/java/cn/meteor/beyondclouds/
core/
util/JwtUtils.java
→
src/main/java/cn/meteor/beyondclouds/util/JwtUtils.java
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
core
.
util
;
package
cn
.
meteor
.
beyondclouds
.
util
;
import
com.auth0.jwt.JWT
;
import
com.auth0.jwt.JWT
;
import
com.auth0.jwt.JWTCreator
;
import
com.auth0.jwt.JWTCreator
;
...
...
src/main/java/cn/meteor/beyondclouds/util/Md5Utils.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
util
;
import
org.apache.commons.codec.digest.Md5Crypt
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
/**
* @author meteor
*/
public
class
Md5Utils
{
public
static
String
encode
(
String
str
)
{
try
{
MessageDigest
digest
=
MessageDigest
.
getInstance
(
"md5"
);
byte
[]
bs
=
digest
.
digest
(
str
.
getBytes
());
String
hexString
=
""
;
for
(
byte
b
:
bs
)
{
int
temp
=
b
&
255
;
if
(
temp
<
16
&&
temp
>=
0
)
{
hexString
=
hexString
+
"0"
+
Integer
.
toHexString
(
temp
);
}
else
{
hexString
=
hexString
+
Integer
.
toHexString
(
temp
);
}
}
return
hexString
;
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
}
src/main/java/cn/meteor/beyondclouds/util/VerifyCodeUtils.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
util
;
import
java.util.Random
;
/**
* 短信验证码工具类
* @author meteor
*/
public
final
class
VerifyCodeUtils
{
private
static
final
Random
random
=
new
Random
();
/**
* 生成随机验证码
* @return
*/
public
static
String
randomVerifyCode
()
{
return
String
.
format
(
"%d%d%d%d"
,
randomNumber
(),
randomNumber
(),
randomNumber
(),
randomNumber
());
}
private
static
int
randomNumber
()
{
return
random
.
nextInt
(
9
);
}
}
src/test/java/cn/meteor/beyondclouds/common/helper/IRedisHelperTest.java
0 → 100644
View file @
77ae64b1
package
cn
.
meteor
.
beyondclouds
.
common
.
helper
;
import
cn.meteor.beyondclouds.common.exception.RedisOperationException
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
IRedisHelperTest
{
private
IRedisHelper
redisHelper
;
@Autowired
public
void
setRedisHelper
(
IRedisHelper
redisHelper
)
{
this
.
redisHelper
=
redisHelper
;
}
@Test
public
void
testSetValue
()
{
try
{
redisHelper
.
set
(
"test"
,
"test1"
);
}
catch
(
RedisOperationException
e
)
{
e
.
printStackTrace
();
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment