充电有喜分析

news2024/11/26 11:45:42

参考相关应用

  1. 华为市场 -> 充电有喜2.0.1
  2. 网络查找 -> 充电有喜1.0.0 http://www.xz7.com/downinfo/609008.html
  3. 反编译app有个文字漏洞,找到 来福充电宝 https://sj.qq.com/appdetail/com.evenhaexplo.courte

需要解决的问题

  1. 电源插拔注册
  2. 为什么需要悬浮窗权限
  3. 后台弹窗实现
  4. 锁屏显示权限

最后的总结

  1. 在壁纸Fragment中监听电源插拔
  2. 有个后台弹出权限,保证弹出来
  3. android.permission.BIND_NOTIFICATION_LISTENER_SERVICE 有一定程度的保活(弱)
  4. (不在项目中)android-keeplive
  5. AndroidKeepAlive

组件化总结

  1. ARouter
  2. BinderHook(https://github.com/pinggle/binderHook)
    Android插件化原理解析——Hook机制之Binder Hook https://weishu.me/2016/02/16/understand-plugin-framework-binder-hook/

其他相关

  1. DSBridge-Android https://github.com/wendux/DSBridge-Android
  2. ijkplayer播放 ‘tv.danmaku.ijk.media:ijkplayer-java:0.8.8’
  3. stringfog 字符串加密

说明:

  1. 定向分析,只找到了上面的总结相关
  2. 还需要非定向分析(即一个包一个包找,需要花些时间)

步骤

使用apkHelper分析基本信息

在这里插入图片描述
com.dwelliembos.equivo

1. 用jadx和GDA打开apk,分析基本信息

jadx

GDA
在这里插入图片描述

通过frida脚本down下内存中的dex

frida -U -f com.xxx.xxx.xxx -l dupDex.js
在相对应的目录下找到生成的dex

分析监听电源插拔,电量变化

在这里插入图片描述
在这里插入图片描述
追溯到CommonWebFragment
在这里插入图片描述
想找CommonWebFragment出现在哪里,目测应该是通用的一个
找到Activity -> com.luoli.oubin.web.CommonWebAct

问题:

  1. CommonWebAct是什么时候调用的

  2. 作用是什么,UI是否透明

	有注册
  <activity android:name="com.luoli.oubin.web.CommonWebAct" ></activity>

package com.luoli.oubin.web.js.BaseWebInterface;
在这里插入图片描述
CommonWebView

在这里插入图片描述
com.dwelliembos.equivo.oOOO00o
找到一些加载的URL
在这里插入图片描述
o0o000Oo.o0o000Oo.o0OO0O0.o0OO0O0

无意间找到首页

在这里插入图片描述
找到几个网址:
https://bd.chengyudatiaozhan.com/update_frontend_service/index?infoId=8d6bb4fe325e4261ae8f161db4e0c88b
在这里插入图片描述
https://bd.chengyudatiaozhan.com/update_frontend_service/index?infoId=e8287ca4a20d4d1abb247857338b85a8
在这里插入图片描述
用户协议 https://docs.qq.com/doc/DQXB5bFZCQWNPVlZz
隐私协议 https://docs.qq.com/doc/DQVJFQVhDd3dNY1pG

MainActivity

在这里插入图片描述
this.setContentView(0x7f0c0025);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多个Fragment

  1. 首页 new o00oooo(),
    在这里插入图片描述
    主页的主内容
    在这里插入图片描述
    在这里插入图片描述
    0x7f0c006

.field public static final fragment_home:I = 0x7F0C0066
在这里插入图片描述
重点在Reclerview

但是,并没有找到CommonWebFragment相关的?

  1. 壁纸 new oOOO00o(),
    在这里插入图片描述

  2. 福气 new oo0o0oO(),

  3. 我的 new o00o0oO0(

回到正题,找到CommonWebFragment

在壁纸Fragment中监听了插拔信息

找到了 com.air.wallpaper.realpage.details.view.real.ChargeWallPaperActivity@e9b63bf

android.permission.BIND_NOTIFICATION_LISTENER_SERVIC

Android 通知监听服务、NotificationListenerService使用方式(详细步骤+源码) 原创
https://blog.51cto.com/u_15117645/5669824

Android NotificationListenerService通知监听服务使用
https://www.jb51.net/article/267863.htm

        <service android:name="com.test.rommatch.service.NotificationService" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
            <intent-filter >
                <action android:name="android.service.notification.NotificationListenerService" ></action>
            </intent-filter>
        </service>

悬浮窗权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses-permission>

Android app打开系统界面设置悬浮窗权限
https://blog.csdn.net/niuba123456/article/details/120197603

不同机型判断悬浮窗权限
android window浮窗 安卓10悬浮窗适配 转载
https://blog.51cto.com/u_16213635/7853449

后台弹出壁纸

  1. 找监听电源插拔ACTION_POWER_CONNECTED

  2. 在这里插入图片描述

  3. 跳转到LazyWallpaperActivity
    在这里插入图片描述

  4. 清单文件中

<activity android:name="com.whiaz.wall.LazyWallpaperActivity" android:launchMode="3" android:screenOrientation="1" android:configChanges="0x000004a0" ></activity>
  1. WallpaperLayoutManager
    自定义的

  2. LazyWallpaperActivity的界面
    在这里插入图片描述

  3. R$layout.activity_wallpaper_details
    在这里插入图片描述

  4. 设置壁纸界面
    在这里插入图片描述

  5. 弹出ChargeWallPaperActivity
    在这里插入图片描述
    应该是组件化策略Arouter
    在这里插入图片描述

  6. 找到Arouter的这个
    在这里插入图片描述

  7. 静态代码跳转的设置壁纸界面, 但弹出框是ChargeActivity。两个不一样。有问题??

  8. LazyWallpaperActivity
    在这里插入图片描述

找保活相关

com.dwelliembos.equivo.App

在v2.0.1中
在这里插入图片描述

解决思路

1. 都需要什么权限

在这里插入图片描述
来福充电宝~~~

找到权限弹窗LazyWxShowPermissionActivity

adb shell dumpsys activity top
在这里插入图片描述

跳转到悬浮窗权限

public interface abstract o000o000	// class@001156 from classes.dex
{

    default static void o0OO0O0(Activity p0,int p1){
       if (Build$VERSION.SDK_INT >= 23) {
          Intent intent = new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION");
          intent.setData(Uri.parse("package:"+p0.getPackageName()));
          p0.startActivityForResult(intent, p1);
       }
       return;
    }
}

PERMISSION_HAD_GRANTED_BACKGROUND

android 10+从后台启动 Activity 的限制
https://blog.csdn.net/xiaoyantan/article/details/128401740
android 系统权限授权 安卓授权管理
https://blog.51cto.com/u_12228/6575401

在这里插入图片描述

class LazyWxShowPermissionActivity$o0OO0O0 implements oOO0oo00	// class@001123 from classes.dex
{
    final LazyWxShowPermissionActivity o0OO0O0;

    void LazyWxShowPermissionActivity$o0OO0O0(LazyWxShowPermissionActivity p0){
       this.o0OO0O0 = p0;
       super();
    }
    public void o0OO0O0(){
       LazyWxShowPermissionActivity.o0Ooo0(this.o0OO0O0).oOO0oo00.setSelected(false);
       oo0oOO0.oOOOooOO("开启后台弹出权限失败,请重试");
    }
    public void oOO0oo00(){
       ActivityManager systemServic = this.o0OO0O0.getSystemService("activity");
       boolean b = (Build$VERSION.SDK_INT >= 28)? systemServic.isBackgroundRestricted(): true;
       if (oOOo0OO0.o00o0oOO()) {
          LazyWxShowPermissionActivity.o0Ooo0(this.o0OO0O0).oOO0oo00.setSelected(true);
          oOOo0000.o0OO0O0.o0o000Oo("PERMISSION_HAD_GRANTED_BACKGROUND", true);
          return;
       }else if(ooooooO0.o0o0OOoO()){
          LazyWxShowPermissionActivity.o0Ooo0(this.o0OO0O0).oOO0oo00.setSelected(true);
          oOOo0000.o0OO0O0.o0o000Oo("PERMISSION_HAD_GRANTED_BACKGROUND", true);
       }
       if (!b) {
          LazyWxShowPermissionActivity.o0Ooo0(this.o0OO0O0).oOO0oo00.setSelected(true);
          oOOo0000.o0OO0O0.o0o000Oo("PERMISSION_HAD_GRANTED_BACKGROUND", true);
       }else {
          LazyWxShowPermissionActivity.o0Ooo0(this.o0OO0O0).oOO0oo00.setSelected(false);
          ToastUtils.oo00O00o("开启后台弹出权限失败,请重试");
       }
       return;
    }
}

Android 判断后台运行权限是否开启

https://blog.51cto.com/u_16213369/7650688

Android 取消后台运行限制

https://www.jianshu.com/p/1e75b9fb71d2
workmanager

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

如何设置壁纸

❌只是一个弹窗,并不是概念上的壁纸功能,所以后台弹窗是很重要的
VideoWallpaperService
com.whiaz.wall.VideoWallpaperService

        <service android:name="com.whiaz.wall.VideoWallpaperService" android:permission="android.permission.BIND_WALLPAPER" >
            <intent-filter >
                <action android:name="android.service.wallpaper.WallpaperService" ></action>
            </intent-filter>
            <meta-data android:name="android.service.wallpaper" android:resource="@xml/wallpaper" ></meta-data>
        </service>

保活库AndroidKeepAlive

https://github.com/fgkeepalive/AndroidKeepAlive

Android进程保活实战经验(已经上线使用)

https://blog.51cto.com/u_16353097/8775791

https://github.com/08carmelo/android-keeplive

https://github.com/08carmelo/android-keeplive

不同的手机有不同的策略

在这里插入图片描述
不断地点进去,都可以找到相应的手机型号
在这里插入图片描述
在这里插入图片描述

锁屏显示弹窗

How to enable ‘show in lock screen’ permission in andriod
https://stackoverflow.com/questions/60478065/how-to-enable-show-in-lock-screen-permission-in-andriod

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

public static void goToNotificationSettings(Context context) {
    Intent intent = new Intent();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.fromParts(SCHEME, context.getPackageName(), null));
    } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
        intent.putExtra("app_package", context.getPackageName());
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
        intent.putExtra("app_package", context.getPackageName());
        intent.putExtra("app_uid", context.getApplicationInfo().uid);
    } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setData(Uri.parse("package:" + context.getPackageName()));
    } else {
        return;
    }
    context.startActivity(intent);
}

if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_NOTIFICATION_POLICY) != PackageManager.PERMISSION_GRANTED) {
        goToNotificationSettings(getActivity());
    }
    
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);



创建简单的 widget
https://developer.android.com/develop/ui/views/appwidgets?hl=zh-cn#lockscreen

Android开发艺术探索》第八章笔记.md
https://github.com/francistao/LearningNotes/blob/aa04b68b728a3505077f8d2a1ce931b758367b54/Part5/ReadingNotes/%E3%80%8AAndroid%E5%BC%80%E5%8F%91%E8%89%BA%E6%9C%AF%E6%8E%A2%E7%B4%A2%E3%80%8B%E7%AC%AC%E5%85%AB%E7%AB%A0%E7%AC%94%E8%AE%B0.md?plain=1#L17

监听插入电源

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log

object ChargingMonitor {
    val TAG = ChargingMonitor::class.simpleName
    private val callbacks = CopyOnWriteArrayList<Callback>()
    private val intentFilter = IntentFilter().apply {
        addAction(Intent.ACTION_POWER_CONNECTED)
        addAction(Intent.ACTION_POWER_DISCONNECTED)
        priority = 1000
    }

    init {
        MyApp.application.registerReceiver(object : BroadcastReceiver {
            override fun onReceive(context: Context, intent: Intent) {
                Log.i(TAG, "ChargingMonitor 有广播到了 action=${intent.action}!")
                if (intent.action == Intent.ACTION_POWER_CONNECTED) {
                    callbacks.forEach { callback -> callback.onCharging(true) }
                } else {
                    callbacks.forEach { callback -> callback.onCharging(false) }
                }
            }
        }, intentFilter)
        Log.i(TAG, "注册监听电源插拔成功!")
    }

    fun init() = Unit

    fun addCallback(callback: Callback) {
        callbacks.add(callback)
    }

    fun removeCallback(callback: Callback) {
        callbacks.remove(callback)
    }

    interface Callback {
        fun onCharging(isCharging: Boolean)
    }
}

AndroidManifest.xml文件中的权限可以一一分析

    <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" ></uses-permission>
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission>
    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.GET_TASKS" ></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK" ></uses-permission>
    <uses-permission android:name="android.permission.SET_WALLPAPER" ></uses-permission>
    <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" ></uses-permission>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" ></uses-permission>
    <uses-permission android:name="android.permission.REORDER_TASKS" ></uses-permission>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses-permission>
    <uses-permission android:name="android.permission.READ_SETTINGS" ></uses-permission>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission>
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" ></uses-permission>
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" ></uses-permission>
    <uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" ></uses-permission>
    <uses-permission android:name="oppo.permission.OPPO_COMPONENT_SAFE" ></uses-permission>
    <uses-permission android:name="com.huawei.permission.external_app_settings.USE_COMPONENT" ></uses-permission>

MessengerUtils.java

https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java

很多使用的方法
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md

额外分析

在这里插入图片描述

资料

多个dex文件合成方法

https://zhuanlan.zhihu.com/p/681385679
在这里插入图片描述

光环助手

com.sensorsdata.analytics.android.sdk.remote.SensorsDataRemoteManagerDebug

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1591000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux C柔性数组(零长数组)

零长数组&#xff0c;大小为0&#xff0c;一般用在结构体中&#xff08;网络通信&#xff0c;省流&#xff09;&#xff0c;节省空间&#xff0c;方便善后&#xff08;相对于指针类型&#xff09;&#xff0c;我们通过具体例子进行理解。 常规定长数组 #include <stdio.h&…

[温故] 红黑树算法

前言 最近在突然想起一些基础的东西, 向着温故知新, 有了些新的感悟和大家分享一下. 排序算法是数据结构的一个重要组成部分, 当时学习的时候没有少折腾, 这里来看看大佬们怎么运用这些数据结构来构建庞大的计算机体系的. 二叉树是排序算法的一个衍生, 基于二叉树的构建不同…

【路径规划】基于六次多项式的多关节机器人避障路径规划

最近迷上了机械臂避障轨迹规划&#xff0c;因为之前一直做的都是无障碍物轨迹规划&#xff0c;所以这次想试一下有障碍物的&#xff0c;把避障算法用在我的SimMechanics机械臂上&#xff0c;看看效果咋样。以下定义不区分路径规划和轨迹规划。   by the way&#xff0c;本文实…

一种跳板机的实现思路

一、 跳板机思路简介 本文所描述的跳板机&#xff08;下文称为“jmp”&#xff09;支持&#xff1a; Linux服务器 Windows服务器 其他终端&#xff08;MySQL终端、Redis终端、网络设备终端 等等&#xff09; 有别于市面上常见的jumpserver方案&#xff0c;使用本文所搭建的跳…

CSS实现卡片在鼠标悬停时突出效果

在CSS中&#xff0c;实现卡片在鼠标悬停时突出&#xff0c;通常使用:hover伪类选择器。 :hover伪类选择器用于指定当鼠标指针悬停在某个元素上时&#xff0c;该元素的状态变化。通过:hover选择器&#xff0c;你可以定义鼠标悬停在元素上时元素的样式&#xff0c;比如改变颜色、…

最新PDD批发Anti-Content参数逆向分析与算法还原

文章目录 1. 写在前面2. 接口分析3. 分析与扣代码 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Py…

Java(今天偷懒一丢丢

今天学了一点点io流 基本概念 输入流&#xff08;InputStream&#xff09;&#xff1a;用于从数据源读取数据。输出流&#xff08;OutputStream&#xff09;&#xff1a;用于向目标写入数据。 分类 按功能分类 字节流&#xff1a;处理字节数据&#xff0c;如 InputStream 和…

CSS aspect-ratio属性设置元素宽高比

aspect-ratio 是CSS的一个属性&#xff0c;用于设置元素的期望宽高比。它设置确保元素保持特定的比例&#xff0c;不受其内容或容器大小的影响。 语法&#xff1a; aspect-ratio: <ratio>;其中 <ratio> 是一个由斜杠&#xff08;/&#xff09;分隔的两个数字&…

韩顺平 | 零基础快速学Python(12) OOP基础

面向对象编程-基础 类与对象 类提供了把数据和功能绑定在一起的方法。创建新类时创建了新的对象类型&#xff0c;从而能够创建该类型的新实例/对象。 类时抽象的概念&#xff0c;作为数据类型代表一类事物&#xff1b;对象时具体实际的&#xff0c;作为实例代表具体事物&…

【c语言】atoi函数---使用和模拟实现(详解)

atoi函数---使用和模拟实现 atoi函数在Cplusplus中的定义 atoi函数的使用 #include <stdio.h> #include <stdlib.h>int main() {char arr[20] "4831213";int ret 0;ret atoi(arr);printf("arr:%s\n", arr);printf("ret:%d\n", re…

JWT重放漏洞如何攻防?你的系统安全吗?

大家好&#xff0c;我是石头~ 在数字化浪潮席卷全球的今天&#xff0c;JSON Web Token&#xff08;JWT&#xff09;作为身份验证的利器&#xff0c;已成为众多Web应用的首选方案。 然而&#xff0c;正如硬币有两面&#xff0c;JWT的强大功能背后也隐藏着潜在的安全风险&#xf…

手把手教你如何下载学浪上的视频课程

学浪直播课程下载技术尚未攻克&#xff0c;但视频课程下载却易如反掌。 1.首先解压好我给大家准备好的压缩包 学浪下载器链接&#xff1a;https://pan.baidu.com/s/1y7vcqILToULrYApxfEzj_Q?pwdkqvj 提取码&#xff1a;kqvj --来自百度网盘超级会员V10的分享 2.首先解压我…

OpenHarmony编译构建系统

这篇来聊聊OpenHarmony的编译构建&#xff0c;经过前面的实践&#xff0c;再来看编译构建。 编译构建概述 在官网中提到了&#xff0c;OpenHarmony编译子系统是以GN和Ninja构建为基座&#xff0c;对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能…

数据采集仪:自动化监测系统的核心组件

在当代的工业自动化领域&#xff0c;数据采集仪成为了一个关键的技术工具&#xff0c;它不仅仅是简单地将电信号转化为数据信号&#xff0c;而是能够实时、有效地处理和显示各种信号&#xff0c;确保整个监测系统的稳定、高效运行。 点击输入图片描述&#xff08;最多30字&…

计算机网络 子网掩码与划分子网

一、实验要求与内容 1、需拓扑图和两个主机的IP配置截图。 2、设置网络A内的主机IP地址为“192.168.班内学号.2”&#xff0c;子网掩码为“255.255.255.128”&#xff0c;网关为“192.168.班内学号.1”&#xff1b;设置网络B内的主机IP地址为“192.168.班内学号100.2”&#…

JWT详解及实战教程

目录 1.什么是JWT 2.JWT能做什么 3.为什么是JWT 基于传统的Session认证 基于JWT认证 4.JWT的结构是什么? 5.使用JWT 6.封装工具类 7.整合springboot 1.什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way…

CSS-浮动文字环绕布局、隐藏属性display、overflow、三角形制作、鼠标样式

文字环绕布局 CSS文字环绕布局是指在网页中让文字环绕在图片或其他元素周围的布局方式。这通常通过CSS中的float属性来实现。你可以将图片设置为float: left;或float: right;&#xff0c;然后在文本元素中使用clear属性来清除浮动&#xff0c;以确保文字不会覆盖图片。另外&am…

python爬虫-------urllib代理和代理池(第十七天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

介绍一个方便的python包和环境管理软件Anaconda,如何快速安装

为什么要安装Ananconda&#xff1f; Anaconda是一个方便的python包管理和环境管理软件&#xff0c;一般用来配置不同的项目环境。它通过管理工具包、开发环境、Python版本&#xff0c;大大简化了工作流程。不仅可以方便地安装、更新、卸载工具包&#xff0c;而且安装时能自动安…

SpringBoot 微服务token 传递实现

1、前言 随着微服务的流行&#xff0c;微服务之间的安全以及业务需要&#xff0c;都需要穿递token &#xff0c;而token的传递一般通过header 头来传递。从架构的角度来讲 &#xff0c;一般的企业应用都由nginx、业务网关和各个微服务组成。这个nginx 传递header 我就不讲述。下…