Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
Z
zion
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
zhengfg
zion
Commits
67f11d21
提交
67f11d21
authored
10月 30, 2019
作者:
zhengfg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加手机注册,登录功能
上级
d1cb1fa2
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
300 行增加
和
6 行删除
+300
-6
KeyConstant.java
...ava/com/diaoyun/zion/chinafrica/constant/KeyConstant.java
+2
-1
LoginController.java
...m/diaoyun/zion/chinafrica/controller/LoginController.java
+24
-3
TbCfUserInfoController.java
...un/zion/chinafrica/controller/TbCfUserInfoController.java
+5
-0
TbCfUserInfoDao.java
...java/com/diaoyun/zion/chinafrica/dao/TbCfUserInfoDao.java
+6
-0
TbCfUserInfoService.java
.../diaoyun/zion/chinafrica/service/TbCfUserInfoService.java
+17
-0
TbCfUserInfoServiceImpl.java
...zion/chinafrica/service/impl/TbCfUserInfoServiceImpl.java
+90
-1
SMSUtil.java
src/main/java/com/diaoyun/zion/master/util/SMSUtil.java
+146
-0
TbCfUserInfoDao.xml
src/main/resources/mapper/TbCfUserInfoDao.xml
+4
-1
ZionApplicationTests.java
src/test/java/com/diaoyun/zion/ZionApplicationTests.java
+6
-0
没有找到文件。
src/main/java/com/diaoyun/zion/chinafrica/constant/KeyConstant.java
浏览文件 @
67f11d21
...
...
@@ -24,7 +24,8 @@ public class KeyConstant {
/////////////////订单 END////////////////
//验证码前缀
public
final
static
String
CAPTCHA
=
"captcha_"
;
//手机验证码前缀
public
final
static
String
CAPTCHA_PHONE
=
"captcha_phone"
;
//自定义id头部
public
final
static
String
CUSTOMIZE_ID
=
"customizeId_"
;
}
src/main/java/com/diaoyun/zion/chinafrica/controller/LoginController.java
浏览文件 @
67f11d21
...
...
@@ -5,6 +5,8 @@ import com.diaoyun.zion.chinafrica.vo.TbCfUserInfoVo;
import
com.diaoyun.zion.master.base.BaseController
;
import
com.diaoyun.zion.master.base.Result
;
import
com.diaoyun.zion.master.common.TokenManager
;
import
com.diaoyun.zion.master.validator.Validator
;
import
com.diaoyun.zion.master.validator.annotation.ValidateParam
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
...
...
@@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
/**
...
...
@@ -40,7 +43,11 @@ public class LoginController extends BaseController {
public
Result
<
TbCfUserInfoVo
>
registerAndLogin
(
@ApiParam
(
"用户信息"
)
@RequestBody
TbCfUserInfoVo
tbCfUserInfoVo
)
{
return
tbCfUserInfoService
.
registerAndLogin
(
tbCfUserInfoVo
);
}
@ApiOperation
(
value
=
"注册并登录"
)
@PostMapping
(
value
=
"/registerByPhone"
)
public
Result
<
TbCfUserInfoVo
>
registerByPhone
(
@ApiParam
(
"用户信息"
)
@RequestBody
TbCfUserInfoVo
tbCfUserInfoVo
,
@ApiParam
(
value
=
"验证码"
)
@RequestParam
(
"code"
)
String
code
)
{
return
tbCfUserInfoService
.
registerByPhone
(
tbCfUserInfoVo
,
code
);
}
@ApiOperation
(
"登录"
)
@PostMapping
public
Result
<
TbCfUserInfoVo
>
login
(
@ApiParam
(
value
=
"登录名"
)
String
account
,
...
...
@@ -53,8 +60,22 @@ public class LoginController extends BaseController {
public
Result
<
TbCfUserInfoVo
>
loginByToken
()
{
return
tbCfUserInfoService
.
loginByToken
(
getIpAddr
(
request
));
}
@ApiOperation
(
"使用手机号登录"
)
@GetMapping
(
"/phone"
)
public
Result
<
TbCfUserInfoVo
>
loginByPhone
(
@ApiParam
(
value
=
"手机号"
)
@RequestParam
(
"phone"
)
String
phone
,
@ApiParam
(
value
=
"验证码"
)
@RequestParam
(
"code"
)
String
code
){
return
tbCfUserInfoService
.
loginByPhone
(
getIpAddr
(
request
),
phone
,
code
);
}
/**
* 获取短信验证码
*
*/
@ApiOperation
(
value
=
"获取短信验证码"
)
@GetMapping
(
value
=
"/register/identifyCode/{phone}"
)
public
Result
getUserPhoneCode
(
@ApiParam
(
"手机号"
)
@PathVariable
(
"phone"
)
@ValidateParam
({
Validator
.
NOT_BLANK
})
String
phone
)
throws
IOException
{
tbCfUserInfoService
.
getUserPhoneCode
(
phone
);
return
new
Result
(
"Verification code has been sent"
);
}
@ApiOperation
(
"第三方登录"
)
@PostMapping
(
"/thirdParty"
)
// TODO
...
...
src/main/java/com/diaoyun/zion/chinafrica/controller/TbCfUserInfoController.java
浏览文件 @
67f11d21
...
...
@@ -6,6 +6,7 @@ import com.diaoyun.zion.chinafrica.vo.TbCfUserInfoVo;
import
com.diaoyun.zion.master.base.BaseController
;
import
com.diaoyun.zion.master.base.Result
;
import
com.diaoyun.zion.master.enums.ResultCodeEnum
;
import
com.diaoyun.zion.master.util.SMSUtil
;
import
com.diaoyun.zion.master.validator.Validator
;
import
com.diaoyun.zion.master.validator.annotation.ValidateParam
;
import
freemarker.template.TemplateException
;
...
...
@@ -18,8 +19,10 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.crypto.password.PasswordEncoder
;
import
org.springframework.ui.ModelMap
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.net.URLDecoder
;
...
...
@@ -58,6 +61,8 @@ public class TbCfUserInfoController extends BaseController {
return
new
Result
(
"Verification code has been sent"
);
}
/**
* 获取存在session中的验证码
*/
...
...
src/main/java/com/diaoyun/zion/chinafrica/dao/TbCfUserInfoDao.java
浏览文件 @
67f11d21
...
...
@@ -26,6 +26,12 @@ public interface TbCfUserInfoDao extends BaseDao<TbCfUserInfoEntity> {
*/
TbCfUserInfoEntity
findByAccount
(
String
account
);
/**
* 根据手机号查找
* @param phone
* @return
*/
TbCfUserInfoEntity
checkUserByPhone
(
String
phone
);
/**
* 更改用户密码
* @param userId
...
...
src/main/java/com/diaoyun/zion/chinafrica/service/TbCfUserInfoService.java
浏览文件 @
67f11d21
...
...
@@ -4,7 +4,9 @@ import com.diaoyun.zion.chinafrica.entity.TbCfUserInfoEntity;
import
com.diaoyun.zion.chinafrica.vo.TbCfUserInfoVo
;
import
com.diaoyun.zion.master.base.Result
;
import
freemarker.template.TemplateException
;
import
io.swagger.annotations.ApiParam
;
import
org.apache.commons.mail.EmailException
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
...
...
@@ -76,6 +78,7 @@ public interface TbCfUserInfoService {
*/
int
deleteBatch
(
String
[]
userIds
);
String
getUserPhoneCode
(
String
phone
)
throws
IOException
;
/**
* 发送注册验证码
* @param email
...
...
@@ -90,6 +93,12 @@ public interface TbCfUserInfoService {
*/
Result
registerAndLogin
(
TbCfUserInfoVo
tbCfUserInfoVo
);
/**
*通过手机注册
* @param tbCfUserInfoVo
* @return
*/
Result
<
TbCfUserInfoVo
>
registerByPhone
(
TbCfUserInfoVo
tbCfUserInfoVo
,
String
code
);
/**
* 用户登录
* @param ipAddr
...
...
@@ -99,6 +108,14 @@ public interface TbCfUserInfoService {
*/
Result
login
(
String
ipAddr
,
String
account
,
String
password
);
/**
* 通过手机号登录
* @param ipAddr
* @param phone
* @param code
* @return
*/
Result
loginByPhone
(
String
ipAddr
,
String
phone
,
String
code
);
/**
* 根据账号 手机、email、昵称 userId 查找
* @param account
...
...
src/main/java/com/diaoyun/zion/chinafrica/service/impl/TbCfUserInfoServiceImpl.java
浏览文件 @
67f11d21
...
...
@@ -211,6 +211,59 @@ public class TbCfUserInfoServiceImpl implements TbCfUserInfoService {
return
result
;
}
@Override
public
Result
<
TbCfUserInfoVo
>
registerByPhone
(
TbCfUserInfoVo
tbCfUserInfoVo
,
String
code
)
{
Result
result
=
new
Result
();
TbCfUserInfoEntity
user
=
tbCfUserInfoDao
.
checkUserByPhone
(
tbCfUserInfoVo
.
getPhone
());
String
phoneCode
=
(
String
)
captchaRedisCache
.
get
(
KeyConstant
.
CAPTCHA_PHONE
+
tbCfUserInfoVo
.
getPhone
());
if
(
code
==
null
||!
code
.
equals
(
phoneCode
)){
result
.
setCode
(
ResultCodeEnum
.
VALIDATE_ERROR
.
getCode
());
result
.
setMessage
(
"Verification code error"
);
}
else
{
if
(
user
==
null
)
{
TbCfUserInfoEntity
tbCfUserInfoEntity
=
new
TbCfUserInfoEntity
();
String
userid
=
IdUtil
.
createIdbyUUID
();
tbCfUserInfoVo
.
setUserId
(
userid
);
//用户姓名
String
nick
=
tbCfUserInfoVo
.
getNick
();
tbCfUserInfoVo
.
setNick
(
nick
);
fillUserNecessayInfo
(
tbCfUserInfoVo
);
//加密密码
String
password
=
passwordEncoder
.
encode
(
tbCfUserInfoVo
.
getPassword
());
tbCfUserInfoVo
.
setPassword
(
password
);
tbCfUserInfoVo
.
setEnableFlag
(
StateConstant
.
VALID
);
BeanUtils
.
copyProperties
(
tbCfUserInfoVo
,
tbCfUserInfoEntity
);
tbCfUserInfoDao
.
save
(
tbCfUserInfoEntity
);
List
<
TbCfCouponEntity
>
couponVailList
=
tbCfCouponService
.
getCouponAndVaildAll
();
//获取当前时间的时分秒
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
//设置日期格式
String
date
=
df
.
format
(
new
Date
());
for
(
int
i
=
0
;
i
<
couponVailList
.
size
();
i
++)
{
TbCfIssueCouponEntity
issue
=
new
TbCfIssueCouponEntity
();
String
coupon_id
=
couponVailList
.
get
(
i
).
getCouponId
();
String
issuseCoupon_id
=
IdUtil
.
createIdbyUUID
();
//把上面获取到的值,赋值到实体类中
issue
.
setCouponId
(
coupon_id
);
issue
.
setCouponIssuetableId
(
issuseCoupon_id
);
issue
.
setCreateTime
(
date
);
issue
.
setUserId
(
userid
);
issue
.
setNick
(
nick
);
issue
.
setEnableFlag
(
1
);
tbCfIssueCouponService
.
save
(
issue
);
}
//注册成功 创建token
String
token
=
jwtTokenProvider
.
createToken
(
tbCfUserInfoVo
.
getAccount
());
tbCfUserInfoVo
.
setToken
(
token
);
//保存在redis
tokenManager
.
addToken
(
token
,
tbCfUserInfoVo
);
result
.
setMessage
(
ResultCodeEnum
.
SUCCESS
.
getDesc
());
result
.
setData
(
tbCfUserInfoVo
);
}
}
return
result
;
}
@Override
public
Result
login
(
String
ip
,
String
account
,
String
password
)
{
try
{
...
...
@@ -222,7 +275,27 @@ public class TbCfUserInfoServiceImpl implements TbCfUserInfoService {
throw
new
ApplicationException
(
ResultCodeEnum
.
NEED_LOGIN
.
getCode
(),
"Invalid username/password supplied or account is disable"
);
}
}
public
Result
loginByPhone
(
String
ip
,
String
phoneNum
,
String
code
){
String
phone
=
phoneNum
.
trim
();
Result
result
=
new
Result
();
TbCfUserInfoEntity
user
=
tbCfUserInfoDao
.
checkUserByPhone
(
phone
);
String
phoneCode
=
(
String
)
captchaRedisCache
.
get
(
KeyConstant
.
CAPTCHA_PHONE
+
phone
);
if
(
user
!=
null
&&
phoneCode
.
equals
(
code
))
{
result
=
loginByPhoneCode
(
ip
,
phone
);
}
else
{
result
.
setCode
(
ResultCodeEnum
.
VALIDATE_ERROR
.
getCode
());
result
.
setMessage
(
"Login failed"
);
}
return
result
;
}
public
String
getUserPhoneCode
(
String
phone
)
throws
IOException
{
SMSUtil
smsUtil
=
new
SMSUtil
();
String
code
=
smsUtil
.
yzCode
(
phone
);
captchaRedisCache
.
set
(
KeyConstant
.
CAPTCHA_PHONE
+
phone
,
code
,
1800
);
return
code
;
}
/**
* 登录
*
...
...
@@ -246,7 +319,23 @@ public class TbCfUserInfoServiceImpl implements TbCfUserInfoService {
result
.
setData
(
loginUser
).
setMessage
(
ResultCodeEnum
.
SUCCESS
.
getDesc
());
return
result
;
}
public
Result
loginByPhoneCode
(
String
ip
,
String
phone
)
{
Result
<
TbCfUserInfoVo
>
result
=
new
Result
<>();
TbCfUserInfoEntity
user
=
tbCfUserInfoDao
.
checkUserByPhone
(
phone
);
user
.
setLastLoginIp
(
ip
);
user
.
setLoginCount
(
user
.
getLoginCount
()
+
1
);
user
.
setLastLoginTime
(
new
Date
());
tbCfUserInfoDao
.
update
(
user
);
TbCfUserInfoVo
loginUser
=
new
TbCfUserInfoVo
();
BeanUtils
.
copyProperties
(
user
,
loginUser
);
loginUser
.
setPassword
(
null
);
String
token
=
jwtTokenProvider
.
createToken
(
user
.
getAccount
());
loginUser
.
setToken
(
token
);
tokenManager
.
addToken
(
token
,
loginUser
);
result
.
setData
(
loginUser
);
result
.
setMessage
(
ResultCodeEnum
.
SUCCESS
.
getDesc
());
return
result
;
}
@Override
public
TbCfUserInfoEntity
findByAccount
(
String
account
)
{
TbCfUserInfoEntity
tbCfUserInfoEntity
=
tbCfUserInfoDao
.
findByAccount
(
account
);
...
...
src/main/java/com/diaoyun/zion/master/util/SMSUtil.java
0 → 100644
浏览文件 @
67f11d21
package
com
.
diaoyun
.
zion
.
master
.
util
;
import
java.io.IOException
;
import
java.net.URISyntaxException
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.commons.lang.RandomStringUtils
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.NameValuePair
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.message.BasicNameValuePair
;
import
org.apache.http.util.EntityUtils
;
/**
* 短信接口类
* @author lyl
*
* 2018年4月18日
*/
public
class
SMSUtil
{
//查账户信息的http地址
private
static
String
URI_GET_USER_INFO
=
"https://sms.yunpian.com/v2/user/get.json"
;
//模板发送接口的http地址
private
static
String
URI_TPL_SEND_SMS
=
"https://sms.yunpian.com/v2/sms/tpl_single_send.json"
;
//private static String URI_TPL_SEND_SMS ="https://sms.yunpian.com/v2/sms/single_send.json";
//编码格式。发送编码格式统一用UTF-8
private
static
String
ENCODING
=
"UTF-8"
;
private
String
API_KEY
=
"cb20310db0e7dcc76a827afbd2ba548f"
;
/**
* 查询用户信息
*
* @param apikey
* @return
* @throws IOException
* @throws URISyntaxException
*/
public
static
String
getUserInfo
(
String
apikey
)
throws
IOException
,
URISyntaxException
{
Map
<
String
,
String
>
params
=
new
HashMap
<
String
,
String
>();
params
.
put
(
"apikey"
,
apikey
);
return
post
(
URI_GET_USER_INFO
,
params
);
}
/**
* 提交响应
*
* @param url
* @param paramsMap
* @return
*/
public
static
String
post
(
String
url
,
Map
<
String
,
String
>
paramsMap
)
{
CloseableHttpClient
client
=
HttpClients
.
createDefault
();
String
responseText
=
""
;
CloseableHttpResponse
response
=
null
;
try
{
HttpPost
method
=
new
HttpPost
(
url
);
if
(
paramsMap
!=
null
)
{
List
<
NameValuePair
>
paramList
=
new
ArrayList
<
NameValuePair
>();
for
(
Map
.
Entry
<
String
,
String
>
param
:
paramsMap
.
entrySet
())
{
NameValuePair
pair
=
new
BasicNameValuePair
(
param
.
getKey
(),
param
.
getValue
());
paramList
.
add
(
pair
);
}
method
.
setEntity
(
new
UrlEncodedFormEntity
(
paramList
,
ENCODING
));
}
response
=
client
.
execute
(
method
);
HttpEntity
entity
=
response
.
getEntity
();
if
(
entity
!=
null
)
{
responseText
=
EntityUtils
.
toString
(
entity
,
ENCODING
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
response
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
responseText
;
}
/**
* 发送验证码
*
* @return
* @throws IOException
*/
public
String
yzCode
(
String
phone
)
throws
IOException
{
if
(
phone
.
equals
(
null
)){
return
"error"
;
}
//编码格式。发送编码格式统一用UTF-8
String
ENCODING
=
"UTF-8"
;
long
tpl_id
=
3253208
;
//模板ID
String
code
=
RandomStringUtils
.
randomNumeric
(
6
);
// 生成6位随机验证码
String
tpl_value
=
URLEncoder
.
encode
(
"#code#"
,
ENCODING
)
+
"="
+
URLEncoder
.
encode
(
code
,
ENCODING
)
;
System
.
out
.
println
(
tpl_value
);
System
.
out
.
println
(
SMSUtil
.
tplSendSms
(
API_KEY
,
tpl_id
,
tpl_value
,
phone
));
return
code
;
}
/**
* 通过模板发送短信
*
* @param apikey
* @param tpl_id
* @param tpl_value
* @param mobile
* @return
* @throws IOException
*/
public
static
String
tplSendSms
(
String
apikey
,
long
tpl_id
,
String
tpl_value
,
String
mobile
)
throws
IOException
{
Map
<
String
,
String
>
params
=
new
HashMap
<
String
,
String
>();
params
.
put
(
"apikey"
,
apikey
);
params
.
put
(
"tpl_id"
,
String
.
valueOf
(
tpl_id
));
params
.
put
(
"tpl_value"
,
tpl_value
);
params
.
put
(
"mobile"
,
mobile
);
return
post
(
URI_TPL_SEND_SMS
,
params
);
}
public
static
String
singleSend
(
String
apikey
,
String
text
,
String
mobile
)
{
Map
<
String
,
String
>
params
=
new
HashMap
<
String
,
String
>();
//请求参数集合
params
.
put
(
"apikey"
,
apikey
);
params
.
put
(
"text"
,
text
);
params
.
put
(
"mobile"
,
mobile
);
return
post
(
"https://sms.yunpian.com/v2/sms/single_send.json"
,
params
);
//请自行使用post方式请求,可使用Apache HttpClient
}
public
static
void
main
(
String
[]
args
)
throws
IOException
{
// SMSUtil.singleSend(URI_TPL_SEND_SMS,"code","+8613751400455");
SMSUtil
s
=
new
SMSUtil
();
String
s1
=
s
.
yzCode
(
"+260972134374"
);
}
}
src/main/resources/mapper/TbCfUserInfoDao.xml
浏览文件 @
67f11d21
...
...
@@ -102,7 +102,10 @@
AND name LIKE concat('%',#{name},'%')
</if>
</select>
<select
id=
"checkUserByPhone"
resultType=
"com.diaoyun.zion.chinafrica.entity.TbCfUserInfoEntity"
>
select * from tb_cf_user_info
WHERE phone=#{phone}
</select>
<insert
id=
"save"
parameterType=
"com.diaoyun.zion.chinafrica.entity.TbCfUserInfoEntity"
>
insert into tb_cf_user_info(
`user_id`,
...
...
src/test/java/com/diaoyun/zion/ZionApplicationTests.java
浏览文件 @
67f11d21
...
...
@@ -10,6 +10,7 @@ import com.diaoyun.zion.chinafrica.service.TbCfUserInfoService;
import
com.diaoyun.zion.master.thread.TaskLimitSemaphore
;
import
com.diaoyun.zion.master.util.AESUtils
;
import
com.diaoyun.zion.master.util.IdUtil
;
import
com.diaoyun.zion.master.util.SMSUtil
;
import
com.stripe.exception.StripeException
;
import
freemarker.template.Configuration
;
import
org.apache.http.NameValuePair
;
...
...
@@ -489,4 +490,9 @@ public class ZionApplicationTests {
String
couponId
=
"1087f4a682354843b145d36c27d2d90e"
;
tbCfIssueCouponDao
.
changeCoupnStatus
(
userId
,
couponId
);
}
@Test
public
void
testPhone
()
throws
IOException
{
//SMSUtil.yzCode("13751400455");
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论