Commit 1f22aa27 authored by zhouqian's avatar zhouqian

登录增加系统key

parent c7ff08c1
......@@ -27,49 +27,6 @@ public interface IBaseController {
}
default Long getChannelId() {
return getNumber("channelId");
}
default Long getCreatedFrom() {
return getNumber("createdFrom");
}
default Long getNumber(String name) {
SessionStruct session = getSessionStruct();
try {
return Long.valueOf(session.getAttribute(name));
} catch (Exception e) {
e.getStackTrace();
}
return 0L;
}
default void setNumber(String name, Long value) {
SessionStruct session = getSessionStruct();
if (session != null) {
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");
if(StringUtils.isEmpty(appChannel)){
return null;
}
return appChannel;
}
default HttpServletRequest getRequest() {
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
......
......@@ -76,7 +76,7 @@ public class AppController implements IBaseController {
String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
@RequestParam(required = false, defaultValue = "1") Long channelId,
String idNo, String name, String key, HttpServletRequest request
String idNo, String name, String key, @RequestParam(required = false, defaultValue = "")String appChannel, HttpServletRequest request
) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("该用户名不存在,<br/>请重新输入或注册新账号。", null);
......@@ -95,17 +95,16 @@ public class AppController implements IBaseController {
if (merchant == null) {
return JsonResult.buildErrorStateResult("无效的商户", null);
}
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, session -> {
session.setAttribute("channelId", String.valueOf(channelId));
session.setAttribute("createdFrom", String.valueOf(registerFrom));
}, merchant);
LoginProperties loginProperties = new LoginProperties();
loginProperties.setChannelId(channelId);
loginProperties.setMerchantName(merchant.getName());
loginProperties.setCreatedFrom(registerFrom);
loginProperties.setAppChannel(appChannel);
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, loginProperties);
AuthBean bean = new AuthBean();
bean.setToken(sessionStruct.getSid());
bean.setPhoneNo(phoneNo);
LOGGER.info("第三方用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", request.getParameter("registerFrom"), request.getParameter("phoneNo"), getAppChannel());
LOGGER.info("第三方用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", request.getParameter("registerFrom"), request.getParameter("phoneNo"), appChannel);
return new JsonResult(bean);
}
......
......@@ -21,9 +21,9 @@ public class AuthInfoController implements IBaseController {
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(UserRet.getUserRet(sessionStruct.getValues().getUser()));
LoginInfo.LoginContext context = new LoginInfo.LoginContext();
context.setChannelId(getChannelId());
context.setCreatedFrom(getCreatedFrom());
context.setAppChannel(getAppChannel());
context.setChannelId(sessionStruct.getValues().getLoginProperties().getChannelId());
context.setCreatedFrom(sessionStruct.getValues().getLoginProperties().getCreatedFrom());
context.setAppChannel(sessionStruct.getValues().getLoginProperties().getAppChannel());
loginInfo.setLoginContext(context);
return JsonResult.buildSuccessResult("", loginInfo);
}
......
......@@ -8,6 +8,7 @@ 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.LoginProperties;
import cn.quantgroup.xyqb.model.UserModel;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
......@@ -86,7 +87,6 @@ public class UserController implements IBaseController {
@RequestMapping("/test")
public JsonResult test() {
setChannelId(100L);
return JsonResult.buildSuccessResult("", getCurrentUser());
}
......@@ -384,8 +384,14 @@ public class UserController implements IBaseController {
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.findSessionIdByUserIdAndMerchant(user.getId(), merchant);
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));
......@@ -397,11 +403,7 @@ public class UserController implements IBaseController {
LOGGER.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
return new JsonResult(authBean);
}
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, (session) -> {
session.setAttribute("channelId", String.valueOf(channelId));
session.setAttribute("createdFrom", String.valueOf(createdFrom));
session.setAttribute("appChannel", String.valueOf(appChannel));
}, merchant);
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, properties);
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
LOGGER.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
......
package cn.quantgroup.xyqb.model;
import lombok.Data;
/**
* Created by Miraculous on 2017/1/6.
*/
@Data
public class LoginProperties {
private Long channelId = 1L;
private Long createdFrom = 1L;
private String appChannel = "";
private String merchantName;
}
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.model.session;
import cn.quantgroup.xyqb.config.http.Timestamp2LongConverter;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.LoginProperties;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -22,6 +23,7 @@ public class SessionValue{
private Timestamp createdAt;
@JSONField(serializeUsing = Timestamp2LongConverter.class)
private Timestamp lastAccessTime;
private String merchantName;
private LoginProperties loginProperties;
}
......@@ -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.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.session.SessionValue;
......@@ -10,14 +11,15 @@ import cn.quantgroup.xyqb.model.session.SessionValue;
* Created by 11 on 2016/12/28.
*/
public interface ISessionService {
SessionStruct createSessionAndPersistInCache(User user, Merchant merchant);
SessionStruct createSessionAndPersistInCache(User user, LoginProperties loginProperties);
SessionStruct createSessionAndPersist(User user, OneArgFunction<SessionStruct> beforPersist, Merchant merchant);
SessionStruct createSessionAndPersist(User user, LoginProperties loginProperties);
String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties);
String findSessionIdByUserIdAndMerchant(Long userId, Merchant merchant);
String findSessionValueBySessionId(String sessionId);
SessionStruct newSession(User user, Merchant merchant);
SessionStruct newSession(User user, LoginProperties properties);
void persistSession(String token, SessionValue sessionValue);
SessionStruct findSessionBySessionId(String sessionId);
......
......@@ -4,6 +4,7 @@ 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.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.session.ISessionService;
......@@ -32,39 +33,41 @@ public class SessionServiceImpl implements ISessionService{
private RedisTemplate<String, String> stringRedisTemplate;
@Override
public SessionStruct createSessionAndPersistInCache(User user, Merchant merchant) {
return createSessionAndPersist(user, null, merchant);
public SessionStruct createSessionAndPersistInCache(User user, LoginProperties properties) {
return createSessionAndPersist(user, properties);
}
@Override
public SessionStruct createSessionAndPersist(User user, OneArgFunction<SessionStruct> beforPersist, Merchant merchant) {
public SessionStruct createSessionAndPersist(User user, LoginProperties properties) {
SessionStruct sessionStruct;
//获取sessionid
String sessionId = findSessionIdByUserIdAndMerchant(user.getId(), merchant);
if(StringUtils.length(sessionId) == 36){
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
if (StringUtils.length(sessionId) == 36) {
sessionStruct = new SessionStruct();
String sessionValue = findSessionValueBySessionId(sessionId);
if(StringUtils.isEmpty(sessionValue)) {
sessionStruct = newSession(user, merchant);
if (beforPersist != null) {
beforPersist.apply(sessionStruct);
}
if (StringUtils.isEmpty(sessionValue)) {
sessionStruct = newSession(user, properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
}
sessionStruct.setSid(sessionId);
}else {
sessionStruct = newSession(user, merchant);
if (beforPersist != null) {
beforPersist.apply(sessionStruct);
}
} else {
sessionStruct = newSession(user, properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
}
return sessionStruct;
}
@Override
public String findSessionIdByUserIdAndMerchant(Long userId, Merchant merchant) {
return stringRedisTemplate.opsForValue().get(Constants.Session.USER_SESSION_ID_CACHE + ":" + merchant.getName() + ":" + userId.toString());
public String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties) {
return stringRedisTemplate.opsForValue().get(generateLoginPropertiesKey(userId, properties));
}
private String generateLoginPropertiesKey(Long userId, LoginProperties properties) {
if ("baitiao".equals(properties.getMerchantName())) {
return Constants.Session.USER_SESSION_ID_CACHE + ":" + String.valueOf(userId) + ":" + properties.getMerchantName() + ":" + properties.getCreatedFrom();
} else {
return Constants.Session.USER_SESSION_ID_CACHE + ":" + String.valueOf(userId) + ":" + properties.getMerchantName();
}
}
@Override
......@@ -74,7 +77,7 @@ public class SessionServiceImpl implements ISessionService{
}
@Override
public SessionStruct newSession(User user, Merchant merchant){
public SessionStruct newSession(User user, LoginProperties loginProperties){
Timestamp now = new Timestamp(System.currentTimeMillis());
SessionStruct sessionStruct = new SessionStruct();
SessionValue sessionValue = new SessionValue();
......@@ -82,7 +85,7 @@ public class SessionServiceImpl implements ISessionService{
sessionValue.setCreatedAt(now);
sessionValue.setLastAccessTime(now);
sessionValue.setUser(user);
sessionValue.setMerchantName(merchant.getName());
sessionValue.setLoginProperties(loginProperties);
Map<String, String> values = new HashMap<>();
sessionValue.setValues(values);
sessionStruct.setValues(sessionValue);
......@@ -96,8 +99,8 @@ public class SessionServiceImpl implements ISessionService{
String json = JSON.toJSONString(sessionValue);
stringRedisTemplate.opsForValue().set(Constants.Session.USER_SESSION_CACHE + token, json,
Constants.Session.ONE_DAY, TimeUnit.SECONDS);
stringRedisTemplate.opsForValue().set(Constants.Session.USER_SESSION_ID_CACHE + ":" + sessionValue.getMerchantName() + ":" +
sessionValue.getUser().getId().toString(), token, Constants.Session.ONE_DAY, TimeUnit.SECONDS);
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties());
stringRedisTemplate.opsForValue().set(key, token, Constants.Session.ONE_DAY, TimeUnit.SECONDS);
}
@Override
......
......@@ -2,30 +2,14 @@ package user;
import cn.quantgroup.xyqb.Bootstrap;
import cn.quantgroup.xyqb.controller.internal.user.UserController;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.test.HttpClient;
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.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by 11 on 2017/1/3.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment