Kaynağa Gözat

新增设备指纹请求头标识

woody 1 yıl önce
ebeveyn
işleme
df99aa28da

+ 28 - 4
framework-base/src/main/java/com/chelvc/framework/base/context/SessionContextHolder.java

@@ -92,6 +92,11 @@ public class SessionContextHolder implements ServletRequestListener {
      */
     public static final String HEADER_SIGNATURE = "signature";
 
+    /**
+     * 设备指纹请求头
+     */
+    public static final String HEADER_FINGERPRINT = "fingerprint";
+
     /**
      * 认证信息请求头
      */
@@ -159,8 +164,8 @@ public class SessionContextHolder implements ServletRequestListener {
         } else {
             session = Session.builder().id(id).scope(scope).anonymous(anonymous).host(original.getHost())
                     .device(original.getDevice()).channel(original.getChannel()).platform(original.getPlatform())
-                    .terminal(original.getTerminal()).version(original.getVersion()).timestamp(original.getTimestamp())
-                    .build();
+                    .terminal(original.getTerminal()).version(original.getVersion())
+                    .fingerprint(original.getFingerprint()).timestamp(original.getTimestamp()).build();
         }
         deque.push(session);
         return session;
@@ -397,6 +402,25 @@ public class SessionContextHolder implements ServletRequestListener {
         return StringUtils.ifEmpty(request.getHeader(HEADER_SIGNATURE), (String) null);
     }
 
+    /**
+     * 获取设备指纹
+     *
+     * @return 设备指纹
+     */
+    public static String getFingerprint() {
+        return ObjectUtils.ifNull(getSession(false), Session::getFingerprint);
+    }
+
+    /**
+     * 获取设备指纹
+     *
+     * @param request Http请求对象
+     * @return 设备指纹
+     */
+    public static String getFingerprint(@NonNull HttpServletRequest request) {
+        return StringUtils.ifEmpty(request.getHeader(HEADER_FINGERPRINT), (String) null);
+    }
+
     /**
      * 获取认证信息
      *
@@ -556,8 +580,8 @@ public class SessionContextHolder implements ServletRequestListener {
         HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
         Session session = Session.builder().id(getId(request)).host(getHost(request)).scope(getScope(request))
                 .device(getDevice(request)).channel(getChannel(request)).platform(getPlatform(request))
-                .terminal(getTerminal(request)).version(getVersion(request)).anonymous(isAnonymous(request))
-                .timestamp(getTimestamp(request)).build();
+                .terminal(getTerminal(request)).version(getVersion(request)).fingerprint(getFingerprint(request))
+                .anonymous(isAnonymous(request)).timestamp(getTimestamp(request)).build();
         setSession(session);
     }
 

+ 1 - 1
framework-boot/pom.xml

@@ -69,7 +69,7 @@
                 <artifactId>apidoc-maven-plugin</artifactId>
                 <version>${apidoc-maven-plugin.version}</version>
                 <configuration>
-                    <includeHeaders>{String} device 设备标识,{String} channel 渠道来源,{String} platform 平台标识: PC(PC)、IOS(苹果)、ANDROID(安卓),{String} terminal 终端标识: WEB(Web)、APP(App)、APPLET(小程序),{String} version 终端版本,{Long} timestamp 请求时间戳,{String} signature 签名信息,{String} authorization 认证信息</includeHeaders>
+                    <includeHeaders>{String} device 设备标识,{String} channel 渠道来源,{String} platform 平台标识: PC(PC)、IOS(苹果)、ANDROID(安卓),{String} terminal 终端标识: WEB(Web)、APP(App)、APPLET(小程序),{String} version 终端版本,{Long} timestamp 请求时间戳,{String} signature 签名信息,{String} fingerprint 设备指纹,{String} authorization 认证信息</includeHeaders>
                     <includeGroupIdentities>com.chelvc.framework</includeGroupIdentities>
                     <excludeClasses>com.chelvc.framework.base.interceptor.GlobalExceptionInterceptor</excludeClasses>
                     <analyserFactoryClass>com.chelvc.framework.base.apidoc.MethodAnalyserFactory</analyserFactoryClass>

+ 5 - 0
framework-common/src/main/java/com/chelvc/framework/common/model/Session.java

@@ -58,6 +58,11 @@ public class Session implements Serializable {
      */
     private String version;
 
+    /**
+     * 设备指纹
+     */
+    private String fingerprint;
+
     /**
      * 是否匿名
      */

+ 1 - 0
framework-feign/src/main/java/com/chelvc/framework/feign/interceptor/FeignHeaderInterceptor.java

@@ -35,6 +35,7 @@ public class FeignHeaderInterceptor implements RequestInterceptor {
             template.header(SessionContextHolder.HEADER_TERMINAL,
                     ObjectUtils.ifNull(session.getTerminal(), Terminal::name));
             template.header(SessionContextHolder.HEADER_VERSION, session.getVersion());
+            template.header(SessionContextHolder.HEADER_FINGERPRINT, session.getFingerprint());
             template.header(SessionContextHolder.HEADER_ANONYMOUS, String.valueOf(session.isAnonymous()));
             template.header(SessionContextHolder.HEADER_TIMESTAMP,
                     (String) ObjectUtils.ifNull(session.getTimestamp(), String::valueOf));