Commit 3782da87 authored by suntao's avatar suntao

一个用户只有一个token

parent aab6e9b1
...@@ -11,7 +11,6 @@ import cn.quantgroup.cashloanflowboss.api.user.entity.User; ...@@ -11,7 +11,6 @@ import cn.quantgroup.cashloanflowboss.api.user.entity.User;
import cn.quantgroup.cashloanflowboss.api.user.model.UserInfo; import cn.quantgroup.cashloanflowboss.api.user.model.UserInfo;
import cn.quantgroup.cashloanflowboss.api.user.service.UserService; import cn.quantgroup.cashloanflowboss.api.user.service.UserService;
import cn.quantgroup.cashloanflowboss.core.Application; import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.base.ServiceResult;
import cn.quantgroup.cashloanflowboss.core.base.Tuple; import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
...@@ -125,11 +124,7 @@ public class LoginServiceImpl implements LoginService { ...@@ -125,11 +124,7 @@ public class LoginServiceImpl implements LoginService {
long currentTimeMillis = System.currentTimeMillis(); long currentTimeMillis = System.currentTimeMillis();
principal.setLoginTimeMillis(currentTimeMillis); principal.setLoginTimeMillis(currentTimeMillis);
String token = Application.getBossToken(request); String token = principalService.getUserBossTokenInRedis(username);
if (principalService.getPrincipal() == null || StringUtils.isEmpty(token)) {
// 是否redis中存在token
token = UUID.randomUUID().toString();
}
principalService.pushPrincipal(token, principal); principalService.pushPrincipal(token, principal);
// session登陆时间,毫秒值 // session登陆时间,毫秒值
......
...@@ -2,6 +2,8 @@ package cn.quantgroup.cashloanflowboss.api.login.service; ...@@ -2,6 +2,8 @@ package cn.quantgroup.cashloanflowboss.api.login.service;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import javax.servlet.http.HttpServletRequest;
/** /**
* 获取用户登陆主题信息 * 获取用户登陆主题信息
* *
...@@ -15,4 +17,19 @@ public interface PrincipalService { ...@@ -15,4 +17,19 @@ public interface PrincipalService {
void pushPrincipal(String token, Principal principal); void pushPrincipal(String token, Principal principal);
void removePrincipal(); void removePrincipal();
/**
* 通过用户名 获取redis中是否已有token存在
* 如果登陆过,或者登陆未过期 沿用token
* 保证一个用户 同一时间 只有一个token,可以作用在防止重复登陆上
* @param username
* @return
*/
String getUserBossTokenInRedis(String username);
/**
* 从header中获取token
* @return
*/
String getUserBossTokenInRequest();
} }
...@@ -2,8 +2,10 @@ package cn.quantgroup.cashloanflowboss.api.login.service; ...@@ -2,8 +2,10 @@ package cn.quantgroup.cashloanflowboss.api.login.service;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.core.Application; import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.constants.Constants;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -22,6 +24,9 @@ public class PrincipalServiceImpl implements PrincipalService { ...@@ -22,6 +24,9 @@ public class PrincipalServiceImpl implements PrincipalService {
@Autowired @Autowired
private HttpServletRequest request; private HttpServletRequest request;
@Autowired
private StringRedisTemplate redisTemplate;
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private ValueOperations<String, Principal> loginOperations; private ValueOperations<String, Principal> loginOperations;
...@@ -47,5 +52,20 @@ public class PrincipalServiceImpl implements PrincipalService { ...@@ -47,5 +52,20 @@ public class PrincipalServiceImpl implements PrincipalService {
} }
} }
@Override
public String getUserBossTokenInRedis(String username) {
// redis 中用姓名作为key,存的用户登陆token为空
String token = redisTemplate.opsForValue().get(Constants.USER_NAME_TOKEN + username);
if (StringUtils.isEmpty(token)) {
return UUID.randomUUID().toString();
}
return token;
}
@Override
public String getUserBossTokenInRequest() {
return this.request.getHeader(Constants.UI_HEADER_TOKEN);
}
} }
...@@ -15,4 +15,5 @@ public interface Constants { ...@@ -15,4 +15,5 @@ public interface Constants {
String TRUE = "true"; String TRUE = "true";
String START_THIS = "#this"; String START_THIS = "#this";
String UI_HEADER_TOKEN = "boss-token"; String UI_HEADER_TOKEN = "boss-token";
String USER_NAME_TOKEN = "username:token:key:";
} }
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