|
|
|
@@ -26,6 +26,8 @@ import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.shiro.SecurityUtils; |
|
|
|
import org.apache.shiro.subject.Subject; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Qualifier; |
|
|
|
import org.springframework.data.redis.core.RedisTemplate; |
|
|
|
import org.springframework.stereotype.Controller; |
|
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
|
|
|
|
@@ -35,6 +37,7 @@ import javax.servlet.http.HttpServletResponse; |
|
|
|
import java.io.IOException; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
|
|
|
|
@Controller |
|
|
|
@@ -52,6 +55,10 @@ public class WechatLoginController extends BaseController { |
|
|
|
@Autowired |
|
|
|
private MallUserRoleService mallUserRoleService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Qualifier("openRedisTemplate") |
|
|
|
RedisTemplate<String, String> openRedisTemplate; |
|
|
|
|
|
|
|
@Data |
|
|
|
private class DisplayUserInfo { |
|
|
|
String mallName; |
|
|
|
@@ -111,8 +118,9 @@ public class WechatLoginController extends BaseController { |
|
|
|
} else { |
|
|
|
// 跳转登录选择页面 |
|
|
|
String key = TOTP.generateWechatOpen(accessToken.getOpenId()); |
|
|
|
RedisUtils redisUtils = new RedisUtils(); |
|
|
|
redisUtils.set(WECHAT_PREV + key, accessToken.getOpenId()); |
|
|
|
if (openRedisTemplate.opsForValue().setIfAbsent(WECHAT_PREV + key, accessToken.getOpenId())){ |
|
|
|
openRedisTemplate.expire(key, 30, TimeUnit.SECONDS); |
|
|
|
} |
|
|
|
List<DisplayUserInfo> users = new ArrayList<DisplayUserInfo>(); |
|
|
|
for(MallUserInfoVo user: userList) { |
|
|
|
DisplayUserInfo disUser = new DisplayUserInfo(); |
|
|
|
@@ -152,12 +160,12 @@ public class WechatLoginController extends BaseController { |
|
|
|
String host = request.getHeader("host"); |
|
|
|
|
|
|
|
String openKey = WECHAT_PREV + key; |
|
|
|
RedisUtils redisUtils = new RedisUtils(); |
|
|
|
// 限时时间内查找到此用户openId |
|
|
|
if(redisUtils.hasKey(openKey)) { |
|
|
|
String openId = redisUtils.get(openKey); |
|
|
|
if (openRedisTemplate.hasKey(WECHAT_PREV + key)){ |
|
|
|
String openId = openRedisTemplate.opsForValue().get(openKey); |
|
|
|
// 删除缓存 |
|
|
|
redisUtils.delete(openKey); |
|
|
|
openRedisTemplate.delete(openKey); |
|
|
|
|
|
|
|
MallUserInfo userInfo = mallUserInfoService.getByUsername(userName); |
|
|
|
if(userInfo.getWebOpenId().equals(openId)) { |
|
|
|
try { |
|
|
|
|