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
68ce0605
Commit
68ce0605
authored
Jan 19, 2017
by
zhouqian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some changes
parent
8bdc4b7b
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
108 additions
and
50 deletions
+108
-50
Constants.java
src/main/java/cn/quantgroup/xyqb/Constants.java
+2
-0
WeChatController.java
...group/xyqb/controller/external/user/WeChatController.java
+70
-16
UserController.java
...ntgroup/xyqb/controller/internal/user/UserController.java
+3
-31
ISessionService.java
...a/cn/quantgroup/xyqb/service/session/ISessionService.java
+3
-1
SessionServiceImpl.java
...ntgroup/xyqb/service/session/impl/SessionServiceImpl.java
+30
-2
No files found.
src/main/java/cn/quantgroup/xyqb/Constants.java
View file @
68ce0605
...
...
@@ -42,7 +42,9 @@ public interface Constants {
interface
Channel
{
long
LKB
=
1
;
// 量化派
long
JR58
=
175
;
// 58金融
long
BAITIAO
=
222L
;
String
LKB_CODE
=
"0002"
;
// 量化派channnel_code
long
WECHAT
=
198L
;
}
interface
Session
{
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/user/WeChatController.java
View file @
68ce0605
package
cn
.
quantgroup
.
xyqb
.
controller
.
external
.
user
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.entity.Merchant
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.webchat.AccessTokenResponse
;
import
cn.quantgroup.xyqb.service.http.IHttpService
;
import
cn.quantgroup.xyqb.service.merchant.IMerchantService
;
import
cn.quantgroup.xyqb.service.page.IPageService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.service.wechat.IWechatService
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -39,12 +43,20 @@ public class WeChatController {
@Autowired
private
IMerchantService
merchantService
;
@Autowired
private
ISessionService
sessionService
;
@Autowired
private
IUserService
userService
;
@Autowired
private
IPageService
pageService
;
// https://passport.xyqb.com/landing?key=xxx&target=cashTarget5®isterFrom=198&channelId=%d
@Value
(
"${xyqb-user.ui}"
)
private
String
userUIAddr
;
/**
* 开发者资质认证,有必要吗?
*
...
...
@@ -162,39 +174,81 @@ public class WeChatController {
AccessTokenResponse
token
=
wechatService
.
getToken
(
code
);
if
(
token
==
null
)
{
// todo: 让用户登录,不关联微信, 构造不关联微信的url
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl
(
response
,
merchant
);
return
;
}
WechatUserInfo
userInfo
=
wechatService
.
getWechatUserInfoFromWechatServer
(
token
.
getAccessToken
(),
token
.
getOpenId
());
if
(
userInfo
==
null
)
{
// todo: 让用户登录,不关联微信, 构造不关联微信的url
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl
(
response
,
merchant
);
return
;
}
WechatUserInfo
userInfoInDb
=
wechatService
.
findWechatUserInfoFromDb
(
userInfo
.
getOpenId
());
// welcome 首次登录
if
(
userInfoInDb
==
null
)
{
//
todo:
微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
userInfo
=
wechatService
.
saveWechatUserInfo
(
userInfo
);
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
redirectWechatLoginUrlWithoutLogin
(
response
,
merchant
,
userInfo
);
return
;
}
if
(
userInfoInDb
.
getUserId
()
==
null
)
{
// todo: 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin
(
response
,
merchant
,
userInfoInDb
);
return
;
}
User
user
=
userService
.
findById
(
userInfoInDb
.
getUserId
());
if
(
user
==
null
)
{
redirectWechatLoginUrlWithoutLogin
(
response
,
merchant
,
userInfoInDb
);
return
;
}
// 已经关联了用户
// todo: create session, 登进去,该怎么玩怎么玩。
createUserSession
(
userInfo
,
merchant
);
// create session, 登进去,该怎么玩怎么玩。
String
redirectUrl
=
createUserSession
(
user
,
merchant
);
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
}
private
String
createUserSession
(
User
user
,
Merchant
merchant
)
{
if
(
"baitiao"
.
equals
(
merchant
.
getName
()))
{
return
loginInWechatWithSessionCreated
(
user
,
merchant
,
"cashTarget5"
,
Constants
.
Channel
.
BAITIAO
);
}
else
{
return
loginInWechatWithSessionCreated
(
user
,
merchant
,
"cashTarget4"
,
1L
);
}
}
private
String
loginInWechatWithSessionCreated
(
User
user
,
Merchant
merchant
,
String
target
,
Long
channelId
)
{
AuthBean
authBean
=
sessionService
.
createSession
(
channelId
,
Constants
.
Channel
.
WECHAT
,
""
,
user
,
merchant
);
return
userUIAddr
+
"/landing?token="
+
authBean
.
getToken
()
+
"®isterFrom=198&channelId="
+
channelId
+
"&key="
+
merchant
.
getName
()
+
"&target="
+
target
;
}
private
void
redirectWechatLoginUrlWithoutLogin
(
HttpServletResponse
response
,
Merchant
merchant
,
WechatUserInfo
userInfo
)
{
String
redirectUrl
=
assembleWechatRedirectUrl
(
merchant
,
userInfo
);
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
}
private
void
redirectNormalUrl
(
HttpServletResponse
response
,
Merchant
merchant
)
{
String
redirectUrl
=
assembleNormalRedirectUrl
(
merchant
);
response
.
setHeader
(
"Location"
,
redirectUrl
);
response
.
setStatus
(
301
);
}
private
String
assembleNormalRedirectUrl
(
Merchant
merchant
)
{
if
(
"baitiao"
.
equals
(
merchant
.
getName
()))
{
return
userUIAddr
+
"/landing?key=baitiao&target=cashTarget5®isterFrom=198&channelId=222"
;
}
else
{
return
userUIAddr
+
"/landing?key=xyqb&target=cashTarget4®isterFrom=198&channelId=1"
;
}
}
private
String
assembleWechatRedirectUrl
(
Merchant
merchant
,
WechatUserInfo
userInfo
)
{
if
(
"baitiao"
.
equals
(
merchant
.
getName
()))
{
return
userUIAddr
+
"/landing?key=baitiao&target=cashTarget5®isterFrom=198&channelId=222&isWechat=true&openId="
+
userInfo
.
getOpenId
();
}
else
{
return
userUIAddr
+
"/landing?key=xyqb&target=cashTarget4®isterFrom=198&channelId=1&isWechat=true&openId="
+
userInfo
.
getOpenId
();
}
}
}
src/main/java/cn/quantgroup/xyqb/controller/internal/user/UserController.java
View file @
68ce0605
...
...
@@ -111,7 +111,7 @@ public class UserController implements IBaseController {
throw
new
UserNotExistException
(
"用户未找到"
);
}
}
return
createSession
(
channelId
,
createdFrom
,
appChannel
,
user
,
merchant
);
return
new
JsonResult
(
sessionService
.
createSession
(
channelId
,
createdFrom
,
appChannel
,
user
,
merchant
)
);
// return createSession(channelId, createdFrom, appChannel, user);
}
...
...
@@ -378,36 +378,8 @@ public class UserController implements IBaseController {
if
(
user
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"用户名或密码不正确"
,
null
);
}
else
{
return
createSession
(
channelId
,
createdFrom
,
appChannel
,
user
,
merchant
);
}
}
private
JsonResult
createSession
(
Long
channelId
,
Long
createdFrom
,
String
appChannel
,
User
user
,
Merchant
merchant
)
{
AuthBean
authBean
=
new
AuthBean
();
LoginProperties
properties
=
new
LoginProperties
();
properties
.
setAppChannel
(
appChannel
);
properties
.
setMerchantName
(
merchant
.
getName
());
properties
.
setChannelId
(
channelId
);
properties
.
setCreatedFrom
(
createdFrom
);
//找到用户
String
sessionId
=
sessionService
.
findSessionIdByUserIdLoginProperties
(
user
.
getId
(),
properties
);
// String sessionId = sessionService.findSessionIdByUserIdAndMerchant(user.getId(), merchant);
if
(
StringUtils
.
isNotEmpty
(
sessionId
))
{
SessionStruct
sessionStruct
=
sessionService
.
findSessionBySessionId
(
sessionId
);
sessionStruct
.
setAttribute
(
"channelId"
,
String
.
valueOf
(
channelId
));
sessionStruct
.
setAttribute
(
"createdFrom"
,
String
.
valueOf
(
createdFrom
));
sessionStruct
.
setAttribute
(
"appChannel"
,
String
.
valueOf
(
appChannel
));
authBean
.
setPhoneNo
(
user
.
getPhoneNo
());
authBean
.
setToken
(
sessionStruct
.
getSid
());
sessionService
.
persistSession
(
sessionStruct
.
getSid
(),
sessionStruct
.
getValues
());
LOGGER
.
info
(
"用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}"
,
createdFrom
,
user
.
getPhoneNo
(),
appChannel
);
return
new
JsonResult
(
authBean
);
}
SessionStruct
sessionStruct
=
sessionService
.
createSessionAndPersist
(
user
,
properties
);
authBean
.
setPhoneNo
(
user
.
getPhoneNo
());
authBean
.
setToken
(
sessionStruct
.
getSid
());
LOGGER
.
info
(
"用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}"
,
createdFrom
,
user
.
getPhoneNo
(),
appChannel
);
return
new
JsonResult
(
authBean
);
return
new
JsonResult
(
sessionService
.
createSession
(
channelId
,
createdFrom
,
appChannel
,
user
,
merchant
));
}
}
private
User
verificateUserNameAndPassword
(
HttpServletRequest
request
)
{
...
...
@@ -449,7 +421,7 @@ public class UserController implements IBaseController {
User
user
=
userService
.
findByUuidInDb
(
userId
);
//用户信息存在,更新session中的最后访问时间,重新写入缓存.
if
(
null
!=
user
)
{
return
createSession
(
channelId
,
createdFrom
,
appChannel
,
user
,
merchant
);
return
new
JsonResult
(
sessionService
.
createSession
(
channelId
,
createdFrom
,
appChannel
,
user
,
merchant
)
);
}
else
{
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
}
...
...
src/main/java/cn/quantgroup/xyqb/service/session/ISessionService.java
View file @
68ce0605
...
...
@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.session;
import
cn.quantgroup.xyqb.entity.Merchant
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.function.OneArgFunction
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
...
...
@@ -11,9 +12,10 @@ import cn.quantgroup.xyqb.model.session.SessionValue;
* Created by 11 on 2016/12/28.
*/
public
interface
ISessionService
{
SessionStruct
createSessionAndPersistInCache
(
User
user
,
LoginProperties
loginProperties
);
AuthBean
createSession
(
Long
channelId
,
Long
createdFrom
,
String
appChannel
,
User
user
,
Merchant
merchant
);
SessionStruct
createSessionAndPersist
(
User
user
,
LoginProperties
loginProperties
);
String
findSessionIdByUserIdLoginProperties
(
Long
userId
,
LoginProperties
properties
);
...
...
src/main/java/cn/quantgroup/xyqb/service/session/impl/SessionServiceImpl.java
View file @
68ce0605
...
...
@@ -4,11 +4,14 @@ import cn.quantgroup.xyqb.Constants;
import
cn.quantgroup.xyqb.entity.Merchant
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.function.OneArgFunction
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionValue
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
com.alibaba.fastjson.JSON
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
...
...
@@ -25,6 +28,7 @@ import java.util.concurrent.TimeUnit;
*
* Created by 11 on 2016/12/28.
*/
@Slf4j
@Service
public
class
SessionServiceImpl
implements
ISessionService
{
...
...
@@ -33,8 +37,32 @@ public class SessionServiceImpl implements ISessionService{
private
RedisTemplate
<
String
,
String
>
stringRedisTemplate
;
@Override
public
SessionStruct
createSessionAndPersistInCache
(
User
user
,
LoginProperties
properties
)
{
return
createSessionAndPersist
(
user
,
properties
);
public
AuthBean
createSession
(
Long
channelId
,
Long
createdFrom
,
String
appChannel
,
User
user
,
Merchant
merchant
)
{
AuthBean
authBean
=
new
AuthBean
();
LoginProperties
properties
=
new
LoginProperties
();
properties
.
setAppChannel
(
appChannel
);
properties
.
setMerchantName
(
merchant
.
getName
());
properties
.
setChannelId
(
channelId
);
properties
.
setCreatedFrom
(
createdFrom
);
//找到用户
String
sessionId
=
findSessionIdByUserIdLoginProperties
(
user
.
getId
(),
properties
);
// String sessionId = sessionService.findSessionIdByUserIdAndMerchant(user.getId(), merchant);
if
(
org
.
apache
.
commons
.
lang
.
StringUtils
.
isNotEmpty
(
sessionId
))
{
SessionStruct
sessionStruct
=
findSessionBySessionId
(
sessionId
);
sessionStruct
.
setAttribute
(
"channelId"
,
String
.
valueOf
(
channelId
));
sessionStruct
.
setAttribute
(
"createdFrom"
,
String
.
valueOf
(
createdFrom
));
sessionStruct
.
setAttribute
(
"appChannel"
,
String
.
valueOf
(
appChannel
));
authBean
.
setPhoneNo
(
user
.
getPhoneNo
());
authBean
.
setToken
(
sessionStruct
.
getSid
());
persistSession
(
sessionStruct
.
getSid
(),
sessionStruct
.
getValues
());
log
.
info
(
"用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}"
,
createdFrom
,
user
.
getPhoneNo
(),
appChannel
);
return
authBean
;
}
SessionStruct
sessionStruct
=
createSessionAndPersist
(
user
,
properties
);
authBean
.
setPhoneNo
(
user
.
getPhoneNo
());
authBean
.
setToken
(
sessionStruct
.
getSid
());
log
.
info
(
"用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}"
,
createdFrom
,
user
.
getPhoneNo
(),
appChannel
);
return
authBean
;
}
@Override
...
...
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