Browse Source

令牌新增针对用户平台的判断逻辑

test
smallchill 5 years ago
parent
commit
dffb075347
  1. 4
      blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
  2. 8
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
  3. 14
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  4. 1
      blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java
  5. 1
      blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
  6. 4
      blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java
  7. 4
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
  8. 7
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
  9. 28
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java
  10. 12
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  11. 5
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java
  12. 7
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  13. 14
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
  14. 11
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
  15. 21
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
  16. 4
      blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java

4
blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java

@ -26,6 +26,7 @@ import org.springblade.auth.utils.TokenUtil;
import org.springblade.core.social.props.SocialProperties;
import org.springblade.core.social.utils.SocialUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.WebUtil;
@ -105,12 +106,13 @@ public class SocialTokenGranter extends AbstractTokenGranter {
BladeUserDetails bladeUserDetails;
if (result.isSuccess()) {
User user = result.getData().getUser();
Kv detail = result.getData().getDetail();
if (user == null) {
throw new InvalidGrantException("social grant failure, user is null");
}
bladeUserDetails = new BladeUserDetails(user.getId(),
tenantId, result.getData().getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(result.getData().getRoles()), Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR),
userOauth.getUsername(), AuthConstant.ENCRYPT + user.getPassword(), true, true, true, true,
userOauth.getUsername(), AuthConstant.ENCRYPT + user.getPassword(), detail, true, true, true, true,
AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
} else {
throw new InvalidGrantException("social grant failure, feign client return error");

8
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java

@ -17,6 +17,7 @@
package org.springblade.auth.service;
import lombok.Getter;
import org.springblade.core.tool.support.Kv;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
@ -74,8 +75,12 @@ public class BladeUserDetails extends User {
* 头像
*/
private final String avatar;
/**
* 用户详情
*/
private final Kv detail;
public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
this.userId = userId;
this.tenantId = tenantId;
@ -88,6 +93,7 @@ public class BladeUserDetails extends User {
this.roleId = roleId;
this.roleName = roleName;
this.avatar = avatar;
this.detail = detail;
}
}

14
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@ -20,7 +20,6 @@ import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springblade.auth.constant.AuthConstant;
import org.springblade.auth.enums.BladeUserEnum;
import org.springblade.auth.utils.TokenUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
@ -31,6 +30,7 @@ import org.springblade.system.entity.Tenant;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.entity.UserInfo;
import org.springblade.system.user.enums.UserEnum;
import org.springblade.system.user.feign.IUserClient;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetailsService;
@ -80,12 +80,12 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
// 远程调用返回数据
R<UserInfo> result;
// 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
if (userType.equals(BladeUserEnum.WEB.getName())) {
result = userClient.userInfo(tenantId, username);
} else if (userType.equals(BladeUserEnum.APP.getName())) {
result = userClient.userInfo(tenantId, username);
if (userType.equals(UserEnum.WEB.getName())) {
result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
} else if (userType.equals(UserEnum.APP.getName())) {
result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
} else {
result = userClient.userInfo(tenantId, username);
result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
}
// 判断返回信息
@ -100,7 +100,7 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
}
return new BladeUserDetails(user.getId(),
user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(result.getData().getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
username, AuthConstant.ENCRYPT + user.getPassword(), true, true, true, true,
username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
} else {
throw new UsernameNotFoundException(result.getMsg());

1
blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java

@ -61,6 +61,7 @@ public class BladeJwtTokenEnhancer implements TokenEnhancer {
info.put(TokenUtil.REAL_NAME, principal.getRealName());
info.put(TokenUtil.ROLE_NAME, principal.getRoleName());
info.put(TokenUtil.AVATAR, principal.getAvatar());
info.put(TokenUtil.DETAIL, principal.getDetail());
info.put(TokenUtil.LICENSE, TokenUtil.LICENSE_NAME);
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(info);

1
blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java

@ -52,6 +52,7 @@ public class TokenUtil {
public final static String TENANT_ID = TokenConstant.TENANT_ID;
public final static String OAUTH_ID = TokenConstant.OAUTH_ID;
public final static String CLIENT_ID = TokenConstant.CLIENT_ID;
public final static String DETAIL = TokenConstant.DETAIL;
public final static String LICENSE = TokenConstant.LICENSE;
public final static String LICENSE_NAME = TokenConstant.LICENSE_NAME;

4
blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java

@ -84,6 +84,10 @@ public enum DictEnum {
* 行政区划
*/
REGION("region"),
/**
* 用户平台
*/
USER_TYPE("user_type"),
;
final String name;

4
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java

@ -39,6 +39,10 @@ public class User extends TenantEntity {
* 用户编号
*/
private String code;
/**
* 用户平台
*/
private Integer userType;
/**
* 账号
*/

7
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java

@ -19,6 +19,7 @@ package org.springblade.system.user.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springblade.core.tool.support.Kv;
import java.io.Serializable;
import java.util.List;
@ -46,6 +47,12 @@ public class UserInfo implements Serializable {
@ApiModelProperty(value = "用户")
private User user;
/**
* 拓展信息
*/
@ApiModelProperty(value = "拓展信息")
private Kv detail;
/**
* 权限标识集合
*/

28
blade-auth/src/main/java/org/springblade/auth/enums/BladeUserEnum.java → blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java

@ -14,7 +14,7 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package org.springblade.auth.enums;
package org.springblade.system.user.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -26,7 +26,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum BladeUserEnum {
public enum UserEnum {
/**
* web
@ -37,9 +37,33 @@ public enum BladeUserEnum {
* app
*/
APP("app", 2),
/**
* other
*/
OTHER("other", 3),
;
final String name;
final int category;
/**
* 匹配枚举值
*
* @param name 名称
* @return BladeUserEnum
*/
public static UserEnum of(String name) {
if (name == null) {
return null;
}
UserEnum[] values = UserEnum.values();
for (UserEnum smsEnum : values) {
if (smsEnum.name.equals(name)) {
return smsEnum;
}
}
return null;
}
}

12
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@ -40,6 +40,7 @@ public interface IUserClient {
String API_PREFIX = "/client";
String USER_INFO = API_PREFIX + "/user-info";
String USER_INFO_BY_TYPE = API_PREFIX + "/user-info-by-type";
String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id";
String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
@ -76,6 +77,17 @@ public interface IUserClient {
@GetMapping(USER_INFO)
R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
/**
* 获取用户信息
*
* @param tenantId 租户ID
* @param account 账号
* @param userType 用户平台
* @return
*/
@GetMapping(USER_INFO_BY_TYPE)
R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType);
/**
* 获取第三方平台信息
*

5
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java

@ -52,6 +52,11 @@ public class UserVO extends User {
*/
private String tenantName;
/**
* 用户平台名
*/
private String userTypeName;
/**
* 角色名
*/

7
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@ -24,6 +24,7 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.entity.UserInfo;
import org.springblade.system.user.entity.UserOauth;
import org.springblade.system.user.enums.UserEnum;
import org.springblade.system.user.service.IUserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -60,6 +61,12 @@ public class UserClient implements IUserClient {
return R.data(service.userInfo(tenantId, account));
}
@Override
@GetMapping(USER_INFO_BY_TYPE)
public R<UserInfo> userInfo(String tenantId, String account, String userType) {
return R.data(service.userInfo(tenantId, account, UserEnum.of(userType)));
}
@Override
@PostMapping(USER_AUTH_INFO)
public R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth) {

14
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@ -12,6 +12,8 @@
<result column="update_time" property="updateTime"/>
<result column="status" property="status"/>
<result column="is_deleted" property="isDeleted"/>
<result column="code" property="code"/>
<result column="user_type" property="userType"/>
<result column="account" property="account"/>
<result column="password" property="password"/>
<result column="name" property="name"/>
@ -25,18 +27,6 @@
<result column="post_id" property="postId"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="baseColumnList">
select id,
create_user AS createUser,
create_time AS createTime,
update_user AS updateUser,
update_time AS updateTime,
status,
is_deleted AS isDeleted,
account, password, name, real_name, email, phone, birthday, sex, role_id, dept_id
</sql>
<select id="selectUserPage" resultMap="userResultMap">
select * from blade_user where is_deleted = 0
<if test="tenantId!=null and tenantId != ''">

11
blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java

@ -23,6 +23,7 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.entity.UserInfo;
import org.springblade.system.user.entity.UserOauth;
import org.springblade.system.user.enums.UserEnum;
import org.springblade.system.user.excel.UserExcel;
import java.util.List;
@ -86,6 +87,16 @@ public interface IUserService extends BaseService<User> {
*/
UserInfo userInfo(String tenantId, String account);
/**
* 用户信息
*
* @param tenantId
* @param account
* @param userEnum
* @return
*/
UserInfo userInfo(String tenantId, String account, UserEnum userEnum);
/**
* 用户信息
*

21
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@ -31,6 +31,7 @@ import org.springblade.core.tenant.BladeTenantProperties;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.*;
import org.springblade.system.cache.ParamCache;
import org.springblade.system.cache.SysCache;
@ -41,6 +42,7 @@ import org.springblade.system.user.entity.User;
import org.springblade.system.user.entity.UserDept;
import org.springblade.system.user.entity.UserInfo;
import org.springblade.system.user.entity.UserOauth;
import org.springblade.system.user.enums.UserEnum;
import org.springblade.system.user.excel.UserExcel;
import org.springblade.system.user.mapper.UserMapper;
import org.springblade.system.user.service.IUserDeptService;
@ -141,6 +143,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
List<Long> deptIdList = SysCache.getDeptChildIds(deptId);
return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId));
}
@Override
public User userByAccount(String tenantId, String account) {
return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, account).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
@ -158,7 +161,17 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
return buildUserInfo(user);
}
@Override
public UserInfo userInfo(String tenantId, String account, UserEnum userEnum) {
User user = baseMapper.getUser(tenantId, account);
return buildUserInfo(user, userEnum);
}
private UserInfo buildUserInfo(User user) {
return buildUserInfo(user, UserEnum.WEB);
}
private UserInfo buildUserInfo(User user, UserEnum userEnum) {
UserInfo userInfo = new UserInfo();
userInfo.setUser(user);
if (Func.isNotEmpty(user)) {
@ -168,6 +181,14 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
userInfo.setRoles(roleAlias);
}
}
// 根据每个用户平台,建立对应的detail表,通过查询将结果集写入到detail字段
if (userEnum == UserEnum.WEB) {
userInfo.setDetail(Kv.create().set("type", userEnum.getName()));
} else if (userEnum == UserEnum.APP) {
userInfo.setDetail(Kv.create().set("type", userEnum.getName()));
} else {
userInfo.setDetail(Kv.create().set("type", userEnum.getName()));
}
return userInfo;
}

4
blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java

@ -51,8 +51,8 @@ public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
userVO.setRoleName(Func.join(roleName));
userVO.setDeptName(Func.join(deptName));
userVO.setPostName(Func.join(postName));
String sex = DictCache.getValue(DictEnum.SEX, Func.toInt(user.getSex()));
userVO.setSexName(sex);
userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
userVO.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
return userVO;
}

Loading…
Cancel
Save