diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java index d99e8c18a..d221d8540 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java @@ -18,8 +18,10 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; +import java.util.List; import java.util.Map; @@ -39,10 +41,13 @@ public class WechatLoginController extends BaseController { @ApiOperation(value = "微信网页登录回调", notes = "请配置此callback到网页redirect_uri") @GetMapping("callback") @ResponseBody - public ResultData getAccessToken(String code, HttpServletResponse response) { + public ResultData getAccessToken(String code, HttpServletRequest request, HttpServletResponse response) { + log.debug("[" + getIpAddr() + "] WechatLoginController::getAccessToken"); + log.debug("code: " + code); ResultData r = new ResultData(); try { WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); + log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId()); // 保存 access_token 到 cookie,两小时过期 Cookie accessTokencookie = new Cookie("accessToken", accessToken.getAccessToken()); accessTokencookie.setMaxAge(60 *2); @@ -53,37 +58,41 @@ public class WechatLoginController extends BaseController { response.addCookie(openIdCookie); // check user openid 是否是已授权用户 - MallUserInfo user = mallUserInfoService.getByWebOpenId(accessToken.getOpenId()); - if(user != null) { - try { - Subject subject = SecurityUtils.getSubject(); - UseriFormallToken token = new UseriFormallToken(user.getUsername()); - subject.login(token); - MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - info.setPassword("保密"); - info.setBopenId("保密"); - info.setWebOpenId("保密"); - String menus = mallUserRoleService.getPermissionsByUser(info); - if(menus != null) { - info.setMenus(menus); + List userList = mallUserInfoService.getByWebOpenId(accessToken.getOpenId()); + if(userList.size() > 0) { + if(userList.size() == 1) { + // 唯一用户 + MallUserInfo user = userList.get(0); + try { + Subject subject = SecurityUtils.getSubject(); + UseriFormallToken token = new UseriFormallToken(user.getUsername()); + subject.login(token); + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.setPassword("保密"); + info.setBopenId("保密"); + info.setWebOpenId("保密"); + String menus = mallUserRoleService.getPermissionsByUser(info); + if(menus != null) { + info.setMenus(menus); + } + r.data = info; + } catch (Exception e) { + return new ResultData(ResultData.ERROR, "用户名或者密码错误"); } - r.data = info; - } catch (Exception e) { - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); + } else { + // 跳转选择界面 + //response.sendRedirect(request.getContextPath() + "/student/html/index.min.html#/app/home?open_id=" + openId); } + } else { Map map = new HashMap(); map.put("accessToken", accessToken.getAccessToken()); map.put("openId", accessToken.getOpenId()); //map.put("unionId", accessToken.getUnionId()); r.data = map; + // 跳转登录页面 + //response.sendRedirect(request.getContextPath() + "/student/html/index.min.html#/bind?type="+Constants.LOGIN_TYPE_WECHAT); } -// if (user == null) { -// response.sendRedirect(request.getContextPath() + "/student/html/index.min.html#/bind?type="+Constants.LOGIN_TYPE_WECHAT); -// } else { -// //如果用户已存在,则直接登录 -// response.sendRedirect(request.getContextPath() + "/student/html/index.min.html#/app/home?open_id=" + openId); -// } return r; } catch (WxErrorException e) { log.error(e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java index 1d1072f56..afbe977df 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java @@ -15,7 +15,7 @@ public interface MallUserInfoMapper extends CommonMapper { MallUserInfo selectByBOpenId(@Param("bopenId") String bopenId, @Param("tenantId") String tenantId); - MallUserInfo selectByWebOpenId(@Param("webOpenId") String webOpenId); + List selectByWebOpenId(@Param("webOpenId") String webOpenId); MallUserInfo selectByPhone(@Param("phone") String phone, @Param("tenantId") String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java index ddffc2e9f..1cbfa6bbc 100644 --- a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java @@ -103,7 +103,7 @@ public interface MallUserInfoService { * @param openId * @return */ - MallUserInfo getByWebOpenId(String openId); + List getByWebOpenId(String openId); /** * 根据条件用户列表 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java index 0facc23ed..dfaa74954 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java @@ -68,8 +68,8 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { } @Override - public MallUserInfo getByWebOpenId(String openId) { - return null; + public List getByWebOpenId(String openId) { + return mallUserInfoMapper.selectByWebOpenId(openId); } @Override