|
|
@@ -18,8 +18,10 @@ import org.springframework.stereotype.Controller; |
|
|
import org.springframework.web.bind.annotation.*; |
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
|
|
|
|
|
import javax.servlet.http.Cookie; |
|
|
import javax.servlet.http.Cookie; |
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
import java.util.HashMap; |
|
|
import java.util.HashMap; |
|
|
|
|
|
import java.util.List; |
|
|
import java.util.Map; |
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -39,10 +41,13 @@ public class WechatLoginController extends BaseController { |
|
|
@ApiOperation(value = "微信网页登录回调", notes = "请配置此callback到网页redirect_uri") |
|
|
@ApiOperation(value = "微信网页登录回调", notes = "请配置此callback到网页redirect_uri") |
|
|
@GetMapping("callback") |
|
|
@GetMapping("callback") |
|
|
@ResponseBody |
|
|
@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(); |
|
|
ResultData r = new ResultData(); |
|
|
try { |
|
|
try { |
|
|
WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); |
|
|
WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); |
|
|
|
|
|
log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId()); |
|
|
// 保存 access_token 到 cookie,两小时过期 |
|
|
// 保存 access_token 到 cookie,两小时过期 |
|
|
Cookie accessTokencookie = new Cookie("accessToken", accessToken.getAccessToken()); |
|
|
Cookie accessTokencookie = new Cookie("accessToken", accessToken.getAccessToken()); |
|
|
accessTokencookie.setMaxAge(60 *2); |
|
|
accessTokencookie.setMaxAge(60 *2); |
|
|
@@ -53,37 +58,41 @@ public class WechatLoginController extends BaseController { |
|
|
response.addCookie(openIdCookie); |
|
|
response.addCookie(openIdCookie); |
|
|
|
|
|
|
|
|
// check user openid 是否是已授权用户 |
|
|
// 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<MallUserInfo> 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 { |
|
|
} else { |
|
|
Map<String, String> map = new HashMap<String, String>(); |
|
|
Map<String, String> map = new HashMap<String, String>(); |
|
|
map.put("accessToken", accessToken.getAccessToken()); |
|
|
map.put("accessToken", accessToken.getAccessToken()); |
|
|
map.put("openId", accessToken.getOpenId()); |
|
|
map.put("openId", accessToken.getOpenId()); |
|
|
//map.put("unionId", accessToken.getUnionId()); |
|
|
//map.put("unionId", accessToken.getUnionId()); |
|
|
r.data = map; |
|
|
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; |
|
|
return r; |
|
|
} catch (WxErrorException e) { |
|
|
} catch (WxErrorException e) { |
|
|
log.error(e.getMessage()); |
|
|
log.error(e.getMessage()); |
|
|
|