From a8d9301e856e493beaedea27275c9e3244119991 Mon Sep 17 00:00:00 2001
From: smallchill <smallchill@163.com>
Date: Sat, 15 Jun 2019 22:50:57 +0800
Subject: [PATCH] =?UTF-8?q?:tada:=20oauth=E7=94=B3=E8=AF=B7token=E5=8F=AF?=
 =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../springblade/auth/enums/BladeUserEnum.java | 45 +++++++++++++++++++
 .../auth/service/BladeUserDetails.java        |  2 +-
 .../service/BladeUserDetailsServiceImpl.java  | 18 +++++++-
 .../org/springblade/auth/utils/TokenUtil.java |  2 +
 4 files changed, 65 insertions(+), 2 deletions(-)
 create mode 100644 blade-auth/src/main/java/org/springblade/auth/enums/BladeUserEnum.java

diff --git a/blade-auth/src/main/java/org/springblade/auth/enums/BladeUserEnum.java b/blade-auth/src/main/java/org/springblade/auth/enums/BladeUserEnum.java
new file mode 100644
index 00000000..5b87c3fc
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/auth/enums/BladeUserEnum.java
@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.auth.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 用户类型枚举
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum BladeUserEnum {
+
+	/**
+	 * web
+	 */
+	WEB("web", 1),
+
+	/**
+	 * app
+	 */
+	APP("app", 2),
+	;
+
+	final String name;
+	final int category;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java b/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
index bc296930..593ac6fd 100644
--- a/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
+++ b/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
@@ -59,7 +59,7 @@ public class BladeUserDetails extends User {
 	 */
 	private String avatar;
 
-	BladeUserDetails(Long userId, String tenantId, String name, 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 name, String roleId, String roleName, String avatar, String username, String password, 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;
diff --git a/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java b/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
index 2f94dfaa..4ca59085 100644
--- a/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
+++ b/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
@@ -19,6 +19,7 @@ package org.springblade.auth.service;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 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;
@@ -49,8 +50,23 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
 	@SneakyThrows
 	public UserDetails loadUserByUsername(String username) {
 		HttpServletRequest request = WebUtil.getRequest();
+		// 获取租户
 		String tenantId = Func.toStr(request.getHeader(TokenUtil.TENANT_HEADER_KEY), TokenUtil.DEFAULT_TENANT_ID);
-		R<UserInfo> result = userClient.userInfo(tenantId, username);
+		// 获取用户类型
+		String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+		// 远程调用返回数据
+		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);
+		} else {
+			result = userClient.userInfo(tenantId, username);
+		}
+
+		// 判断返回信息
 		if (result.isSuccess()) {
 			User user = result.getData().getUser();
 			if (user == null) {
diff --git a/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java b/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
index f097ffa7..ae0261b4 100644
--- a/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
+++ b/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
@@ -49,6 +49,8 @@ public class TokenUtil {
 
 	public final static String TENANT_HEADER_KEY = "Tenant-Id";
 	public final static String DEFAULT_TENANT_ID = "000000";
+	public final static String USER_TYPE_HEADER_KEY = "User-Type";
+	public final static String DEFAULT_USER_TYPE = "web";
 	public final static String USER_NOT_FOUND = "用户名或密码错误";
 	public final static String HEADER_KEY = "Authorization";
 	public final static String HEADER_PREFIX = "Basic ";