某多token登录APP

昨天有个客户在某多上申请了售后退款,本来应该退回支付宝的钱因为某些原因退到了某多钱包。可是这个客户的某多账号只有token数据,没法实名钱包申请提现。只能想办法把账号登录到APP上。我记得一两年前研究过这个问题,翻了很久资料终于找到了当时的文档,顺利把问题解决,在此把文档贴一下:

5.59.00\5.60.0版本

1、运行拼多多,自动生成/data/data/com.xunmeng.pinduoduo/files/pinUserFile


2、强行停止拼多多后,替换/data/data/com.xunmeng.pinduoduo/files/pinUserFile
内容如下:
{"access_token":"CVJUPJMN2WNHPVYOHTUOPJ3GOM6ZOIWHNVLMPF52E6AQHVD2QUUQ1135737","uid":"6357332116311","uin":"DYVVKENEVYVHM5ISUEOKZ3WOXU_GEXDA"}

5.7.0版本

1.登陆之后的数据:
/data/data/com.xunmeng.pinduoduo/shared_prefs/pdd_config_common.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="jsSecureKey___USER_UID__">6328845199095</string>
    <boolean name="__oksp_compat__" value="true" />
    <string name="longlink_local_port">51862</string>
    <string name="jsSecureKey___ACCESS_TOKEN__">JGQWES6SIPUGBEGXTS3BAPXTQ2BJJZBPAO4ODEPEM6IV2CLZ4OJA112f765</string>
    <string name="longlink_local_ip">10.1.10.1</string>
    <string name="pdd_id">mhmhKI6j</string>
    <string name="userAgentString">android Mozilla/5.0 (Linux; Android 5.1.1; OPPO R11 Plus Build/LMY48Z; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Safari/537.36  phh_android_version/5.17.0 phh_android_build/477e7e7ada898a6d38802516dba46bf645562dbe phh_android_channel/qihu360 pversion/0</string>
</map>

2.清除PDD的数据,然后启动PDD,PDD是未登陆的,生成pdd_config_common.xml文件;
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <boolean name="__oksp_compat__" value="true" />
    <string name="longlink_local_port">58543</string>
    <string name="pdd_id">mhmhKI6j</string>
    <string name="userAgentString">android Mozilla/5.0 (Linux; Android 5.1.1; OPPO R11 Plus Build/LMY48Z; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Safari/537.36  phh_android_version/5.17.0 phh_android_build/477e7e7ada898a6d38802516dba46bf645562dbe phh_android_channel/qihu360 pversion/0</string>
    <string name="longlink_local_ip">10.0.2.15</string>
</map>

3.把uid和token写到xml里面去;<string name="jsSecureKey___USER_UID__">6328845199095</string><string name="jsSecureKey___ACCESS_TOKEN__">JGQWES6SIPUGBEGXTS3BAPXTQ2BJJZBPAO4ODEPEM6IV2CLZ4OJA112f765</string>
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="jsSecureKey___USER_UID__">6328845199095</string>
    <boolean name="__oksp_compat__" value="true" />
    <string name="longlink_local_port">58543</string>
    <string name="jsSecureKey___ACCESS_TOKEN__">JGQWES6SIPUGBEGXTS3BAPXTQ2BJJZBPAO4ODEPEM6IV2CLZ4OJA112f765</string>
    <string name="pdd_id">mhmhKI6j</string>
    <string name="userAgentString">android Mozilla/5.0 (Linux; Android 5.1.1; OPPO R11 Plus Build/LMY48Z; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Safari/537.36  phh_android_version/5.17.0 phh_android_build/477e7e7ada898a6d38802516dba46bf645562dbe phh_android_channel/qihu360 pversion/0</string>
    <string name="longlink_local_ip">10.0.2.15</string>
</map>

4.杀死PDD的app,重启。就登陆上去了。

说明:正常只需要2.3.4步骤即可以。第1步是为了抓取数据的样本;

我记得当时的做法很简单暴力,模拟器装一个某多,打开一下,不登录,用esFile把app目录下所有文件压缩拷贝出来,然后登录成功后,再用esFile把app目录下所有文件压缩拷贝出来。最后用beyond compare比较两次文件不同,顺利找到存储token的地方。

### Sa-Token 支持登录的实现方式 Sa-Token 是一款功能强大的 Java 权限认证框架,支持种复杂的场景需求,其中包括登录的功能。以下是关于如何配置和实现 Sa-Token登录的具体说明。 #### 1. 配置 `is-concurrent` 参数 为了支持登录,在 `application.yml` 文件中可以设置参数 `is-concurrent` 为 `true`。该参数表示是否允许地同时登录同一个账号。当其值为 `true` 时,允许个设备同时在线;而当其值为 `false` 时,新的登录会挤掉之前的登录会话[^1]。 ```yaml server: port: 8081 sa-token: token-name: satoken timeout: 2592000 active-timeout: -1 is-concurrent: true # 允许地同时登录 is-share: false # 不同终端使用不同的 Token token-style: uuid is-log: true ``` #### 2. 使用独立的 Token 空间区分不同客户端 Sa-Token 提供了一个非常灵活的设计——Token 前缀空间(即 `token-prefix`)。通过指定不同的前缀来隔离各个客户端的 Token 数据,从而实现真正的登录控制。例如: - Web 端:`stpWeb` - App 端:`stpApp` - 微信小程序端:`stpNext` 可以通过调用以下代码创建带有特定前缀的空间: ```java // 创建 Web 端登录态 StpUtil.setLoginId(10001L); // 创建 App登录态 StpLogic.setLoginId("app", 10001L); ``` 其中,第一个参数用于定义当前登录态所属的逻辑空间名称,第二个参数则是用户的唯一标识 ID[^2]。 #### 3. 自定义全局过滤器处理端请求 在实际项目开发过程中,可能需要针对某些接口做更细粒度的安全验证。此时可通过自定义全局过滤器完成这一目标。比如只允许来自某个具体平台(如移动端)已登录用户访问某资源,则可以在拦截器内部加入如下判断条件: ```java import cn.dev33.satoken.SaManager; import cn.dev33.satoken.stp.StpInterface; public class MyFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp; String uri = request.getRequestURI(); // 如果是敏感路径则执行额外校验 if(uri.contains("/sensitive")) { Object loginId = StpUtil.getLoginId(); if(loginId == null || !loginId.equals(StpUtil.getExtra("platform").equals("mobile"))) { response.sendError(HttpServletResponse.SC_UNAUTHORIZED,"未授权"); return ; } } chain.doFilter(req, resp); } } ``` 以上代码片段展示了如何基于 URI 对应关系以及附加属性来进行权限管理[^2]。 #### 4. 结合数据库存储持久化数据 对于一些高并发的应用环境来说,仅仅依靠内存中的缓存机制难以满足长期稳定运行的要求。因此建议配合 Redis 或其他分布式键值对存储解决方案保存 Session 和 Token 映射表单。这样即使服务器重启也不会丢失任何有效的连接记录。 --- ### 总结 综上所述,要实现 Sa-Token 下的登录主要涉及以下几个方面的工作: - 修改核心配置文件开启并调整相关选项; - 利用内置 API 构建专属命名空间分离各业务模块之间的干扰; - 编写适配自身系统的中间件组件增强安全性保障; - 将临时状态信息迁移到外部媒介之中提高可靠性水平。 希望这些指导能够帮助您顺利完成集成工作!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值