Explorar o código

获取当前用户工具类更新

rengb %!s(int64=3) %!d(string=hai) anos
pai
achega
63bac31626

+ 0 - 5
common/src/main/java/com/lantone/common/constant/AuthConstant.java

@@ -42,9 +42,4 @@ public interface AuthConstant {
      */
     String JWT_TOKEN_PREFIX = "Bearer ";
 
-    /**
-     * 用户信息Http请求头
-     */
-    String USER_TOKEN_HEADER = "user";
-
 }

+ 33 - 14
common/src/main/java/com/lantone/common/util/HttpUtils.java

@@ -16,7 +16,7 @@ import java.util.Map;
 public class HttpUtils {
 
     /**
-     * 尝试获取当前请求的HttpServletRequest实例
+     * 获取当前请求的HttpServletRequest实例
      *
      * @return
      */
@@ -25,7 +25,36 @@ public class HttpUtils {
     }
 
     /**
-     * 获取请求头map
+     * 获取当前请求的请求头Map实例
+     *
+     * @return
+     */
+    public static Map<String, String> getHeaders() {
+        return getHeaders(getHttpServletRequest());
+    }
+
+    /**
+     * 获取当前请求的请求头Map实例中,键为key的值
+     *
+     * @param key
+     * @return
+     */
+    public static String getHeader(String key) {
+        return getHttpServletRequest().getHeader(key);
+    }
+
+    /**
+     * 获取当前请求的请求客户端的真实ip地址
+     *
+     * @return
+     */
+    public static String getIpAddress() {
+        // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
+        return getIpAddress(getHttpServletRequest());
+    }
+
+    /**
+     * 根据HttpServletRequest获取请求头Map实例
      *
      * @param request
      * @return
@@ -42,10 +71,10 @@ public class HttpUtils {
     }
 
     /**
-     * 获取请求客户端的真实ip地址
+     * 根据HttpServletRequest获取请求客户端的真实ip地址
      *
      * @param request
-     * @return ip地址
+     * @return
      */
     public static String getIpAddress(HttpServletRequest request) {
         // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
@@ -82,14 +111,4 @@ public class HttpUtils {
         return ip;
     }
 
-    /**
-     * 获取请求客户端的真实ip地址
-     *
-     * @return ip地址
-     */
-    public static String getIpAddress() {
-        // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
-        return getIpAddress(getHttpServletRequest());
-    }
-
 }

+ 19 - 18
common/src/main/java/com/lantone/common/util/SysUserUtils.java

@@ -5,9 +5,6 @@ import com.lantone.common.constant.AuthConstant;
 import com.lantone.common.domain.UserDto;
 import com.nimbusds.jose.JWSObject;
 
-import java.text.ParseException;
-import java.util.Map;
-
 /**
  * @Description: 用户工具类
  * @author: rengb
@@ -20,33 +17,35 @@ public class SysUserUtils {
      *
      * @return
      */
-    public static String getCurrentToken() {
-        Map<String, String> header = HttpUtils.getHeaders(HttpUtils.getHttpServletRequest());
-        return header.get(AuthConstant.JWT_TOKEN_HEADER);
+    public static String getToken() {
+        return HttpUtils.getHeader(AuthConstant.JWT_TOKEN_HEADER);
     }
 
     /**
-     * 从token中解析出用户信息字符串
+     * 从token中解析出用户信息
      *
      * @param token
      * @return
-     * @throws ParseException
      */
-    public static String getUserStrByToken(String token) throws ParseException {
-        String realToken = token.replace(AuthConstant.JWT_TOKEN_PREFIX, "");
-        JWSObject jwsObject = JWSObject.parse(realToken);
-        return jwsObject.getPayload().toString();
+    public static UserDto getUserByToken(String token) {
+        UserDto userDto = null;
+        try {
+            String realToken = token.replace(AuthConstant.JWT_TOKEN_PREFIX, "");
+            JWSObject jwsObject = JWSObject.parse(realToken);
+            userDto = JSONUtil.toBean(jwsObject.getPayload().toString(), UserDto.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return userDto;
     }
 
     /**
-     * 获取当前用户
+     * 获取当前请求的用户
      *
      * @return
      */
     public static UserDto getCurrentUser() {
-        Map<String, String> header = HttpUtils.getHeaders(HttpUtils.getHttpServletRequest());
-        UserDto userDto = JSONUtil.toBean(header.get(AuthConstant.USER_TOKEN_HEADER), UserDto.class);
-        return userDto;
+        return getUserByToken(getToken());
     }
 
     /**
@@ -55,7 +54,8 @@ public class SysUserUtils {
      * @return
      */
     public static String getCurrentPrinciple() {
-        return getCurrentUser().getUsername();
+        UserDto userDto = getCurrentUser();
+        return userDto == null ? null : userDto.getUsername();
     }
 
     /**
@@ -64,7 +64,8 @@ public class SysUserUtils {
      * @return
      */
     public static String getCurrentPrincipleID() {
-        return getCurrentUser().getId().toString();
+        UserDto userDto = getCurrentUser();
+        return userDto == null ? null : userDto.getId().toString();
     }
 
     /**

+ 7 - 13
gateway-service/src/main/java/com/lantone/authorization/AuthorizationManager.java

@@ -2,7 +2,6 @@ package com.lantone.authorization;
 
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
 import com.lantone.common.constant.AuthConstant;
 import com.lantone.common.domain.UserDto;
 import com.lantone.common.util.SysUserUtils;
@@ -22,7 +21,6 @@ import org.springframework.util.PathMatcher;
 import reactor.core.publisher.Mono;
 
 import java.net.URI;
-import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -59,17 +57,13 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author
             return Mono.just(new AuthorizationDecision(true));
         }
         //不同用户体系登录不允许互相访问
-        try {
-            String token = request.getHeaders().getFirst(AuthConstant.JWT_TOKEN_HEADER);
-            if (StrUtil.isEmpty(token)) {
-                return Mono.just(new AuthorizationDecision(false));
-            }
-            UserDto userDto = JSONUtil.toBean(SysUserUtils.getUserStrByToken(token), UserDto.class);
-            if (AuthConstant.SECURITY_CENTER_CLIENT_ID.equals(userDto.getClientId()) && !pathMatcher.match(AuthConstant.SECURITY_CENTER_URL_PATTERN, uri.getPath())) {
-                return Mono.just(new AuthorizationDecision(false));
-            }
-        } catch (ParseException e) {
-            e.printStackTrace();
+        String token = request.getHeaders().getFirst(AuthConstant.JWT_TOKEN_HEADER);
+        if (StrUtil.isEmpty(token)) {
+            return Mono.just(new AuthorizationDecision(false));
+        }
+        UserDto userDto = SysUserUtils.getUserByToken(token);
+        if (userDto == null || (AuthConstant.SECURITY_CENTER_CLIENT_ID.equals(userDto.getClientId())
+                && !pathMatcher.match(AuthConstant.SECURITY_CENTER_URL_PATTERN, uri.getPath()))) {
             return Mono.just(new AuthorizationDecision(false));
         }
         //非管理端路径直接放行

+ 1 - 20
gateway-service/src/main/java/com/lantone/filter/AuthGlobalFilter.java

@@ -1,41 +1,22 @@
 package com.lantone.filter;
 
-import cn.hutool.core.util.StrUtil;
-import com.lantone.common.constant.AuthConstant;
-import com.lantone.common.util.SysUserUtils;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
-import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
 
-import java.text.ParseException;
-
 /**
- * @Description: 将登录用户的JWT转化成用户信息的全局过滤器
+ * @Description: 全局过滤器(针对特殊业务 备用)
  * @author: rengb
  * @time: 2021/1/5 18:27
  */
-@Slf4j
 @Component
 public class AuthGlobalFilter implements GlobalFilter, Ordered {
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        String token = exchange.getRequest().getHeaders().getFirst(AuthConstant.JWT_TOKEN_HEADER);
-        if (StrUtil.isEmpty(token)) {
-            return chain.filter(exchange);
-        }
-        try {
-            //从token中解析用户信息并设置到Header中去
-            ServerHttpRequest request = exchange.getRequest().mutate().header(AuthConstant.USER_TOKEN_HEADER, SysUserUtils.getUserStrByToken(token)).build();
-            exchange = exchange.mutate().request(request).build();
-        } catch (ParseException e) {
-            log.error(e.getMessage(), e);
-        }
         return chain.filter(exchange);
     }