Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
head_group
xyqb-user2
Commits
26ab629e
Commit
26ab629e
authored
Dec 29, 2016
by
lee_mingzhu
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
c4195364
4222d919
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
198 additions
and
53 deletions
+198
-53
IBaseController.java
...n/java/cn/quantgroup/xyqb/controller/IBaseController.java
+10
-2
AppController.java
...antgroup/xyqb/controller/external/user/AppController.java
+118
-8
UserController.java
...ntgroup/xyqb/controller/internal/user/UserController.java
+34
-40
NonArgFunction.java
...main/java/cn/quantgroup/xyqb/function/NonArgFunction.java
+8
-0
OneArgFunction.java
...main/java/cn/quantgroup/xyqb/function/OneArgFunction.java
+10
-0
ISessionService.java
...a/cn/quantgroup/xyqb/service/session/ISessionService.java
+5
-2
SessionServiceImpl.java
...ntgroup/xyqb/service/session/impl/SessionServiceImpl.java
+13
-1
No files found.
src/main/java/cn/quantgroup/xyqb/controller/IBaseController.java
View file @
26ab629e
...
...
@@ -45,13 +45,21 @@ public interface IBaseController {
return
0L
;
}
default
void
set
ChannelId
(
Long
channelId
)
{
default
void
set
Number
(
String
name
,
Long
value
)
{
SessionStruct
session
=
getSessionStruct
();
if
(
session
!=
null
)
{
session
.
setAttribute
(
"channleId"
,
channelId
.
toString
(
));
session
.
setAttribute
(
name
,
String
.
valueOf
(
value
));
}
}
default
void
setCreatedFrom
(
Long
createdFrom
)
{
setNumber
(
"createdFrom"
,
createdFrom
);
}
default
void
setChannelId
(
Long
channelId
)
{
setNumber
(
"channelId"
,
channelId
);
}
default
String
getAppChannel
()
{
SessionStruct
session
=
getSessionStruct
();
String
appChannel
=
session
.
getAttribute
(
"appChannel"
);
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/user/AppController.java
View file @
26ab629e
package
cn
.
quantgroup
.
xyqb
.
controller
.
external
.
user
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.exception.NullUserException
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.*
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.repository.IUserDetailRepository
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
import
cn.quantgroup.xyqb.service.auth.IIdCardService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.sms.ISmsService
;
import
cn.quantgroup.xyqb.service.user.ILkbUserService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.util.IPUtil
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
cn.quantgroup.xyqb.util.Utils
;
import
cn.quantgroup.xyqb.util.ValidationUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.web.PagedResourcesAssembler
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
java.security.Principal
;
import
java.sql.Timestamp
;
import
java.util.Random
;
/**
* @author mengfan.feng
...
...
@@ -22,23 +42,113 @@ public class AppController implements IBaseController {
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
AppController
.
class
);
@Autowired
private
ISessionService
sessionService
;
@Autowired
private
IUserService
userService
;
@Autowired
private
ILkbUserService
lkbUserService
;
@Autowired
private
IUserRepository
userRepository
;
@Autowired
private
ISmsService
smsService
;
@Autowired
private
IUserDetailRepository
userDetailRepository
;
@Autowired
private
IIdCardService
idCardService
;
private
final
static
Random
random
=
new
Random
();
/**
* 第三方用户登录
*
* @param user
* @return
*/
@RequestMapping
(
"/login"
)
public
JsonResult
login
(
Principal
user
,
HttpServletRequest
request
)
{
public
JsonResult
login
(
String
phoneNo
,
@RequestParam
(
required
=
false
,
defaultValue
=
"0"
)
Long
registerFrom
,
String
idNo
,
String
name
,
HttpServletRequest
request
)
{
if
(!
ValidationUtil
.
validatePhoneNo
(
phoneNo
))
{
return
JsonResult
.
buildErrorStateResult
(
"该用户名不存在,<br/>请重新输入或注册新账号。"
,
null
);
}
String
requestIp
=
IPUtil
.
getRemoteIP
(
request
);
LOGGER
.
info
(
"第三方用户登录, loginFrom:{}, requestIp:{}"
,
registerFrom
,
requestIp
);
User
user
=
userService
.
findByPhone
(
phoneNo
);
if
(
user
==
null
)
{
user
=
register
(
registerFrom
,
phoneNo
,
idNo
,
name
);
}
if
(
user
==
null
)
{
throw
new
NullUserException
(
);
return
JsonResult
.
buildErrorStateResult
(
"该用户名不存在,<br/>请重新输入或注册新账号。"
,
null
);
}
SessionStruct
sessionStruct
=
sessionService
.
createSessionAndPersist
(
user
,
session
->
{
session
.
setAttribute
(
"channelId"
,
"1"
);
session
.
setAttribute
(
"createdFrom"
,
String
.
valueOf
(
registerFrom
));
});
AuthBean
bean
=
new
AuthBean
(
getRequest
().
getSession
().
getId
(),
user
);
AuthBean
bean
=
new
AuthBean
();
bean
.
setToken
(
sessionStruct
.
getSid
());
bean
.
setPhoneNo
(
phoneNo
);
LOGGER
.
info
(
"第三方用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}"
,
request
.
getParameter
(
"registerFrom"
),
request
.
getParameter
(
"phoneNo"
),
getAppChannel
());
return
new
JsonResult
(
bean
);
}
/**
* 注册新用户
*
* @return
*/
private
User
register
(
Long
registerFrom
,
String
phoneNo
,
String
idNo
,
String
name
)
{
String
randomCode
=
String
.
valueOf
(
random
.
nextInt
(
899999
)
+
100000
);
String
uuid
=
lkbUserService
.
registerApp
(
phoneNo
,
randomCode
);
Timestamp
currentTime
=
new
Timestamp
(
System
.
currentTimeMillis
());
LOGGER
.
info
(
"第三方登录用户,保存 User"
);
User
user
=
new
User
();
user
.
setRegisteredFrom
(
registerFrom
);
user
.
setUuid
(
uuid
);
user
.
setEnable
(
true
);
user
.
setPhoneNo
(
phoneNo
);
user
.
setPassword
(
PasswordUtil
.
MD5
(
randomCode
+
Constants
.
PASSWORD_SALT
));
user
.
setUpdatedAt
(
currentTime
);
user
.
setCreatedAt
(
currentTime
);
userRepository
.
saveAndFlush
(
user
);
smsService
.
sendAfterRegister
(
phoneNo
);
LOGGER
.
info
(
"第三方登录用户注册成功, registerFrom:{}, phoneNo:{}, 并且已发送短信通知"
,
registerFrom
,
phoneNo
);
if
(
StringUtils
.
isNotEmpty
(
idNo
)
&&
StringUtils
.
isNotEmpty
(
name
))
{
LOGGER
.
info
(
"第三方登录用户,保存 UserDetail"
);
IdCardInfo
cardInfo
;
try
{
cardInfo
=
idCardService
.
getIdCardInfoWithExceptions
(
idNo
);
UserDetail
userDetail
=
new
UserDetail
();
userDetail
.
setIdNo
(
cardInfo
.
getIdNo
());
userDetail
.
setPhoneNo
(
phoneNo
);
userDetail
.
setName
(
name
);
userDetail
.
setIdType
(
IdType
.
ID_CARD
);
userDetail
.
setCreatedAt
(
currentTime
);
userDetail
.
setUpdatedAt
(
currentTime
);
userDetail
.
setUserId
(
user
.
getId
());
userDetail
.
setGender
(
cardInfo
.
getGender
());
userDetailRepository
.
saveAndFlush
(
userDetail
);
lkbUserService
.
userUpdate
(
user
.
getUuid
(),
name
,
idNo
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"保存 UserDetail 出现异常"
,
e
);
}
}
return
user
;
}
}
src/main/java/cn/quantgroup/xyqb/controller/internal/user/UserController.java
View file @
26ab629e
...
...
@@ -4,6 +4,7 @@ import cn.quantgroup.xyqb.Constants;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserDetail
;
import
cn.quantgroup.xyqb.exception.UserNotExistException
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.UserModel
;
...
...
@@ -61,14 +62,6 @@ public class UserController implements IBaseController {
@Qualifier
(
"stringRedisTemplate"
)
private
RedisTemplate
<
String
,
String
>
stringRedisTemplate
;
@Autowired
@Qualifier
(
"redisConnectionFactory"
)
private
RedisConnectionFactory
redisConnectionFactory
;
@Autowired
@Qualifier
(
"redisTemplate"
)
private
RedisTemplate
redisTemplate
;
@Autowired
private
ISmsService
smsService
;
...
...
@@ -113,7 +106,7 @@ public class UserController implements IBaseController {
return
JsonResult
.
buildErrorStateResult
(
"用户名或密码不正确"
,
null
);
}
//找到用户
SessionStruct
sessionStruct
=
sessionService
.
createSession
(
user
);
SessionStruct
sessionStruct
=
sessionService
.
createSession
AndPersistInCache
(
user
);
LOGGER
.
info
(
"用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}"
,
getCreatedFrom
(),
user
.
getPhoneNo
(),
getAppChannel
());
AuthBean
authBean
=
new
AuthBean
();
authBean
.
setPhoneNo
(
user
.
getPhoneNo
());
...
...
@@ -164,7 +157,9 @@ public class UserController implements IBaseController {
}*/
@RequestMapping
(
"/login/fast"
)
public
JsonResult
loginFast
(
HttpServletRequest
request
){
public
JsonResult
loginFast
(
@RequestParam
(
required
=
false
,
defaultValue
=
"1"
)
Long
channelId
,
String
appChannel
,
@RequestParam
(
required
=
false
,
defaultValue
=
"1"
)
Long
createdFrom
,
HttpServletRequest
request
){
String
verificationHeader
=
"Verification "
;
String
credential
=
request
.
getHeader
(
"authorization"
);
if
(
StringUtils
.
isBlank
(
credential
)){
...
...
@@ -187,38 +182,30 @@ public class UserController implements IBaseController {
}
String
phoneNo
=
credentialArr
[
0
];
String
verificationCode
=
credentialArr
[
1
];
if
(!
matchPhoneNo
(
phoneNo
)){
LOGGER
.
info
(
"用户快速登录,phoneNo:{} , verificationCode:{}"
,
phoneNo
,
verificationCode
);
if
(!
ValidationUtil
.
validatePhoneNo
(
phoneNo
)){
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
}
if
(!
validateVerificationCode
(
phoneNo
,
verificationCode
)){
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
LOGGER
.
info
(
"用户快速登录,验证码校验失败,phoneNo:{} , verificationCode:{}"
,
phoneNo
,
verificationCode
);
return
JsonResult
.
buildErrorStateResult
(
"验证码错误"
,
null
);
}
User
user
=
userService
.
findByPhone
(
phoneNo
);
if
(
user
==
null
){
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
user
=
registerFastWhenLogin
(
phoneNo
,
channelId
,
createdFrom
,
appChannel
);
if
(
user
==
null
)
{
throw
new
UserNotExistException
(
"用户未找到"
);
}
}
String
sessionId
=
sessionService
.
findSessionIdByUserId
(
user
.
getId
());
if
(
StringUtils
.
isBlank
(
sessionId
)){
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
}
SessionStruct
sessionStruct
=
null
;
if
(
sessionId
.
length
()
==
36
){
String
value
=
sessionService
.
findSessionValueBySessionId
(
sessionId
);
if
(
StringUtils
.
isBlank
(
value
)){
sessionStruct
=
sessionService
.
newSession
(
user
);
SessionValue
sessionValue
=
new
SessionValue
();
sessionValue
.
setUser
(
user
);
sessionValue
.
setLastAccessTime
(
new
Timestamp
(
System
.
currentTimeMillis
()));
sessionValue
.
setCreatedAt
(
new
Timestamp
(
System
.
currentTimeMillis
()));
Map
<
String
,
String
>
values
=
new
HashMap
();
sessionValue
.
setValues
(
values
);
sessionService
.
persistSession
(
sessionStruct
.
getSid
(),
sessionValue
);
}
sessionStruct
.
setSid
(
sessionId
);
}
else
{
sessionStruct
=
sessionService
.
newSession
(
user
);
sessionService
.
persistSession
(
sessionStruct
.
getSid
(),
sessionService
.
newSession
(
user
).
getValues
());
}
SessionStruct
sessionStruct
=
sessionService
.
createSessionAndPersist
(
user
,
(
session
)
->
{
session
.
setAttribute
(
"channelId"
,
String
.
valueOf
(
channelId
));
session
.
setAttribute
(
"createdFrom"
,
String
.
valueOf
(
createdFrom
));
session
.
setAttribute
(
"appChannel"
,
String
.
valueOf
(
appChannel
));
});
AuthBean
authBean
=
new
AuthBean
();
authBean
.
setPhoneNo
(
user
.
getPhoneNo
());
authBean
.
setToken
(
sessionStruct
.
getSid
());
...
...
@@ -245,15 +232,6 @@ public class UserController implements IBaseController {
return
false
;
}
private
boolean
matchPhoneNo
(
String
phoneNo
){
String
patternString
=
"1\\d{10}"
;
Pattern
pattern
=
Pattern
.
compile
(
patternString
);
Matcher
matcher
=
pattern
.
matcher
(
phoneNo
);
if
(
matcher
.
matches
()){
return
true
;
}
return
false
;
}
/**
* 用户快速注册
...
...
@@ -484,4 +462,20 @@ public class UserController implements IBaseController {
return
JsonResult
.
buildSuccessResult
(
"token校验成功"
,
userModel
);
}
public
User
registerFastWhenLogin
(
String
phoneNo
,
Long
channelId
,
Long
registerFrom
,
String
appChannel
)
{
String
password
=
genRandomPwd
();
LOGGER
.
info
(
"用户快速注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},appChannel:{}"
,
phoneNo
,
channelId
,
registerFrom
,
appChannel
);
if
(!
ValidationUtil
.
validatePhoneNo
(
phoneNo
))
{
LOGGER
.
info
(
"用户快速注册失败,手机号错误, registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
throw
new
UserNotExistException
(
"手机号错误"
);
}
if
(
null
==
registerFrom
)
{
registerFrom
=
1L
;
}
LOGGER
.
info
(
"用户快速注册成功, registerFrom:{}, phoneNo:{}"
,
registerFrom
,
phoneNo
);
return
userService
.
registerAndReturn
(
phoneNo
,
password
,
registerFrom
);
}
}
src/main/java/cn/quantgroup/xyqb/function/NonArgFunction.java
0 → 100644
View file @
26ab629e
package
cn
.
quantgroup
.
xyqb
.
function
;
/**
* Created by Miraculous on 2016/12/29.
*/
public
interface
NonArgFunction
{
void
apply
();
}
src/main/java/cn/quantgroup/xyqb/function/OneArgFunction.java
0 → 100644
View file @
26ab629e
package
cn
.
quantgroup
.
xyqb
.
function
;
/**
* Created by Miraculous on 2016/12/29.
*/
public
interface
OneArgFunction
<
S
>
{
void
apply
(
S
t
);
}
src/main/java/cn/quantgroup/xyqb/service/session/ISessionService.java
View file @
26ab629e
package
cn
.
quantgroup
.
xyqb
.
service
.
session
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.
model.JsonResult
;
import
cn.quantgroup.xyqb.
function.OneArgFunction
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
...
...
@@ -9,7 +9,10 @@ import cn.quantgroup.xyqb.model.session.SessionValue;
* Created by 11 on 2016/12/28.
*/
public
interface
ISessionService
{
SessionStruct
createSession
(
User
user
);
SessionStruct
createSessionAndPersistInCache
(
User
user
);
SessionStruct
createSessionAndPersist
(
User
user
,
OneArgFunction
<
SessionStruct
>
function
);
String
findSessionIdByUserId
(
Long
userId
);
String
findSessionValueBySessionId
(
String
sessionId
);
SessionStruct
newSession
(
User
user
);
...
...
src/main/java/cn/quantgroup/xyqb/service/session/impl/SessionServiceImpl.java
View file @
26ab629e
...
...
@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.session.impl;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.function.OneArgFunction
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
...
...
@@ -29,7 +30,12 @@ public class SessionServiceImpl implements ISessionService{
private
RedisTemplate
<
String
,
String
>
stringRedisTemplate
;
@Override
public
SessionStruct
createSession
(
User
user
)
{
public
SessionStruct
createSessionAndPersistInCache
(
User
user
)
{
return
createSessionAndPersist
(
user
,
null
);
}
@Override
public
SessionStruct
createSessionAndPersist
(
User
user
,
OneArgFunction
<
SessionStruct
>
beforPersist
)
{
SessionStruct
sessionStruct
;
//获取sessionid
String
sessionId
=
findSessionIdByUserId
(
user
.
getId
());
...
...
@@ -38,11 +44,17 @@ public class SessionServiceImpl implements ISessionService{
String
sessionValue
=
findSessionValueBySessionId
(
sessionId
);
if
(
StringUtils
.
isEmpty
(
sessionValue
))
{
sessionStruct
=
newSession
(
user
);
if
(
beforPersist
!=
null
)
{
beforPersist
.
apply
(
sessionStruct
);
}
persistSession
(
sessionStruct
.
getSid
(),
sessionStruct
.
getValues
());
}
sessionStruct
.
setSid
(
sessionId
);
}
else
{
sessionStruct
=
newSession
(
user
);
if
(
beforPersist
!=
null
)
{
beforPersist
.
apply
(
sessionStruct
);
}
persistSession
(
sessionStruct
.
getSid
(),
sessionStruct
.
getValues
());
}
return
sessionStruct
;
...
...
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