Просмотр исходного кода

[微信第三方登录][修改]:多绑定用户登录

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
80a54edf95
7 измененных файлов: 136 добавлений и 21 удалений
  1. +15
    -13
      mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java
  2. +2
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java
  3. +49
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java
  4. +4
    -0
      mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java
  5. +17
    -2
      mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java
  6. +12
    -2
      mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java
  7. +37
    -4
      mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml

+ 15
- 13
mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java Просмотреть файл

@@ -112,7 +112,6 @@ public class HomeController extends BaseController {
} else {
info.setWithWechat(false);
}
// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId());
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
@@ -169,20 +168,16 @@ public class HomeController extends BaseController {
Subject subject = SecurityUtils.getSubject();
UseriFormallToken token = new UseriFormallToken(user.getUsername());
subject.login(token);
// List<MallRole> roleList = sysRoleService.findRoleByUserId(user.getId());
// if (null != roleList && roleList.size() > 0) {
// List<MallPermission> permissionList = sysPermissionService
// .findPermissionByRoleIds(roleList.stream().map(MallRole::getId).collect(Collectors.toList()));
// user.setRole(roleList);
// user.setPermission(permissionList);
// }
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
if(StringUtils.isNotBlank(info.getBopenId()))
info.setBopenId("保密");
if(StringUtils.isNotBlank(info.getWebOpenId()))
if(StringUtils.isNotBlank(info.getWebOpenId())) {
info.setWebOpenId("保密");
// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId());
info.setWithWechat(true);
} else {
info.setWithWechat(false);
}
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
@@ -247,9 +242,12 @@ public class HomeController extends BaseController {
info.setPassword("保密");
if(StringUtils.isNotBlank(info.getBopenId()))
info.setBopenId("保密");
if(StringUtils.isNotBlank(info.getWebOpenId()))
if(StringUtils.isNotBlank(info.getWebOpenId())) {
info.setWebOpenId("保密");
// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId());
info.setWithWechat(true);
} else {
info.setWithWechat(false);
}
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
@@ -306,8 +304,12 @@ public class HomeController extends BaseController {
info.setPassword("保密");
if(StringUtils.isNotBlank(info.getBopenId()))
info.setBopenId("保密");
if(StringUtils.isNotBlank(info.getWebOpenId()))
if(StringUtils.isNotBlank(info.getWebOpenId())) {
info.setWebOpenId("保密");
info.setWithWechat(true);
} else {
info.setWithWechat(false);
}
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);


+ 2
- 0
mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java Просмотреть файл

@@ -5,6 +5,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*;
import com.iformall.domain.vo.MallUserInfoVo;
import com.iformall.enums.EnumMallUserStatus;
import com.iformall.enums.EnumUserAdmin;
import com.iformall.enums.EnumFlowPermissionType;
@@ -392,4 +393,5 @@ public class MallUserInfoController extends BaseController {
resultMap.put("billUserList",billUserList);
return new ResultData(resultMap);
}

}

+ 49
- 0
mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java Просмотреть файл

@@ -1,10 +1,14 @@
package com.iformall.controller;

import com.iformall.common.ResultData;
import com.iformall.domain.po.MallUserInfo;
import com.iformall.domain.vo.MallUserInfoVo;
import com.iformall.service.MallUserInfoService;
import com.iformall.service.MallUserRoleService;
import com.iformall.shiro.UserSession;
import com.iformall.shiro.UseriFormallToken;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
@@ -73,6 +77,7 @@ public class WechatLoginController extends BaseController {
info.setPassword("保密");
info.setBopenId("保密");
info.setWebOpenId("保密");
info.setWithWechat(true);
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
@@ -107,6 +112,50 @@ public class WechatLoginController extends BaseController {
}
}

@ApiOperation(value = "微信登录用户信息列表")
@GetMapping("getMallUserList")
@ApiImplicitParams({
@ApiImplicitParam(name = "openId", value = "openId", dataType = "String", paramType = "query", required = true)})
public ResultData getMallUserList(String openId) {
log.debug("[" + getIpAddr() + "] MallUserInfoController::getMallUserList");
List<MallUserInfoVo> users = mallUserInfoService.getUsersByWebOpenId(openId);
// TODO 添加 加密串

return new ResultData(users);
}

@ApiOperation(value = "微信用户登录")
@GetMapping("weChatUserLogin")
@ApiImplicitParams({
@ApiImplicitParam(name = "openId", value = "openId", dataType = "String", paramType = "query", required = true),
@ApiImplicitParam(name = "uname", value = "uname", dataType = "String", paramType = "query", required = true)})
public void weChatUserLogin(String uname, String openId, HttpServletRequest request, HttpServletResponse response) {
log.debug("[" + getIpAddr() + "] MallUserInfoController::weChatUserLogin");
String host = request.getHeader("host");
MallUserInfo userInfo = mallUserInfoService.getByUsernameWebOpenId(uname, openId);
try {
Subject subject = SecurityUtils.getSubject();
UseriFormallToken token = new UseriFormallToken(userInfo.getUsername());
subject.login(token);
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
info.setBopenId("保密");
info.setWebOpenId("保密");
info.setWithWechat(true);
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
}
Cookie unameCookie = new Cookie("uname", info.getUsername());
unameCookie.setMaxAge(60);
response.addCookie(unameCookie);
log.debug("https://" + host + "/#/");
response.sendRedirect("https://" + host + "/#/layout");
} catch (Exception e) {
log.error(e.getMessage());
}
}

@ApiOperation(value = "微信第三方登录绑定", notes = "请配置此callback到网页redirect_uri")
@GetMapping("bindWebOpenId")
public void userBindWebOpenId(String code, String state, HttpServletRequest request, HttpServletResponse response) {


+ 4
- 0
mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java Просмотреть файл

@@ -14,6 +14,8 @@ public interface MallUserInfoMapper extends CommonMapper<MallUserInfo, String> {

MallUserInfo selectByUserName(@Param("username") String username);

MallUserInfo selectByUserNameWebOpen(@Param("username") String username, @Param("webOpenId") String webOpenId);

MallUserInfo selectByBOpenId(@Param("bopenId") String bopenId, @Param("tenantId") String tenantId);

List<MallUserInfo> selectByWebOpenId(@Param("webOpenId") String webOpenId);
@@ -27,4 +29,6 @@ public interface MallUserInfoMapper extends CommonMapper<MallUserInfo, String> {

List<MallUserInfoVo> selectUsersByPhone(@Param("phone") String phone);

List<MallUserInfoVo> selectUsersByWebOpenId(@Param("webOpenId") String webOpenId);

}

+ 17
- 2
mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java Просмотреть файл

@@ -113,10 +113,25 @@ public interface MallUserInfoService {
/**
* 根据web端OpenId获得实体
*
* @param openId
* @param webOpenId
* @return
*/
List<MallUserInfo> getByWebOpenId(String webOpenId);

/**
* 根据phone获得展示列表
*
* @param webOpenId
* @return
*/
List<MallUserInfoVo> getUsersByWebOpenId(String webOpenId);

/**
* 根据用户名webOpenId查询用户对象
* @param username
* @return
*/
List<MallUserInfo> getByWebOpenId(String openId);
MallUserInfo getByUsernameWebOpenId(String username, String webOpenId);

void updateWebOpenId(MallUserInfo user);



+ 12
- 2
mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java Просмотреть файл

@@ -81,8 +81,18 @@ public class MallUserInfoServiceImpl implements MallUserInfoService {
}

@Override
public List<MallUserInfo> getByWebOpenId(String openId) {
return mallUserInfoMapper.selectByWebOpenId(openId);
public List<MallUserInfo> getByWebOpenId(String webOpenId) {
return mallUserInfoMapper.selectByWebOpenId(webOpenId);
}

@Override
public List<MallUserInfoVo> getUsersByWebOpenId(String webOpenId) {
return mallUserInfoMapper.selectUsersByWebOpenId(webOpenId);
}

@Override
public MallUserInfo getByUsernameWebOpenId(String username, String webOpenId) {
return mallUserInfoMapper.selectByUserNameWebOpen(username, webOpenId);
}

@Override


+ 37
- 4
mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml Просмотреть файл

@@ -18,6 +18,10 @@
<result column="flow_permission" property="flowPermission"/>
</resultMap>

<sql id="allSafeColumns">
`id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`flow_permission`
</sql>

<sql id="allColumns">
`id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`bopen_id`,`web_open_id`,`flow_permission`
</sql>
@@ -87,7 +91,7 @@

<select id="findList" parameterType="com.iformall.domain.po.MallUserInfo" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
<include refid="allSafeColumns"/>
from mall_user_info
<include refid="dynamicWhereConditions"/>
</select>
@@ -102,11 +106,24 @@
</if>
</select>

<select id="selectByBOpenId" resultMap="BaseResultMap">
<select id="selectByUserNameWebOpen" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from mall_user_info
where 1=1
<if test=" null != username ">
and username=#{username}
</if>
<if test=" null != webOpenId ">
and `web_open_id`=#{webOpenId}
</if>
</select>

<select id="selectByBOpenId" resultMap="BaseResultMap">
select
<include refid="allSafeColumns"/>
from mall_user_info
where 1=1
<if test=" null != tenantId ">
and `tenant_id`=#{tenantId}
</if>
@@ -184,15 +201,20 @@
<result column="img_url_h" jdbcType="VARCHAR" property="imgUrlH"/>
</resultMap>

<sql id="allSafeVColumns">
u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`flow_permission`,
m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`
</sql>

<sql id="allVColumns">
u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`bopen_id`,u.`web_open_id`,u.`flow_permission`,
u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`flow_permission`,
m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`
</sql>


<select id="selectUsersByPhone" resultMap="VBaseResultMap">
select
<include refid="allVColumns"/>
<include refid="allSafeVColumns"/>
from mall_user_info u
left join wx_mall m where m.`tenant_id` = u.`tenant_id`
where 1=1
@@ -201,4 +223,15 @@
</if>
</select>

<select id="selectUsersByWebOpenId" resultMap="VBaseResultMap">
select
<include refid="allSafeVColumns"/>
from mall_user_info u
left join wx_mall m where m.`tenant_id` = u.`tenant_id`
where 1=1
<if test=" null != webOpenId ">
and u.`web_open_id` = #{webOpenId}
</if>
</select>

</mapper>

Загрузка…
Отмена
Сохранить