V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RayGZJ
V2EX  ›  Java

关于在 SpringBoot 项目中模拟登陆持久化 cookie 的解决方案讨论

  •  
  •   RayGZJ · 2020-07-02 22:47:30 +08:00 · 2595 次点击
    这是一个创建于 1365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因

    第一个程序版本--为了学习解放双手

    1. 因为作为管理员需要给员工解锁,当系统检测到当前用户 cookie 失效时,mac 地址会被锁定。员工数量 300-500 。作为管理员,使用者每天会因为各种原因触发系统的 mac 地址锁定机制,导致我每天都要登陆系统,输入工号,再点击解锁。工作效率较低,这直接导致我没时间研究学习 Java,以及在 V2 中学习前辈经验。

    2. 为解放双手,初学者写了个 Jsoup 模拟登陆的 java 小程序,放在 CentOS 通过手机端 ssh 连接直接运行 jar 程序 ,或者直接在 java 程序写个输入循环,java -jar 直接丢 tmux 里面的其中一个会话即可。

    3. 在第一个版本中模拟登陆只需要携带 name 、password 作为POST参数直接发送给指定接口获取 cookie 即可。

    4. 获取 cookie 后,通过 JSoup 访问指定的两个接口即可实现解锁。

      请输入第 1 位,待解锁员工的账号
      XXXXXX //输入的账号
      =================================
       🆔 用户 id 为:121
       👤 ‍姓名:XXX
       🔗 mac 绑定状态:已绑定
      =================================
       📝 职位:经理
       📒 部门:12-3 组
       🔒 15 天锁定状态为:正常
       ✅ 完成! 15 天未锁定!
      =================================
      系统正在检查 XX 的非工作设备锁定状态...
      XX 的非工作设备状态为: 已绑定
       💻 服务器返回的状态为: 清除成功
       ✅ 已自动为 XX 解锁非工作设备!
      =================================
      感谢使用!
      请输入第 2 位,待解锁员工的 CRM 账号
      
      

      第二个版本--SpringBoot 版,解锁更多骚操作

    • 正如程序本身是提高工作效率的知道思想下,我突发奇想,将程序放在 SpringBoot 中后,会有很多骚操作,第一个好处就是程序一直在运行,同时通过接口来做一个极为简陋的前端,实现网页解锁,也算有一个网页端。 CleanShot 2020-07-02 at 22.18.45@2x.png
    • 由于访问接口解锁成功后,服务器会返回 Json 的值,来显示一些必要的信息,所以第二个想法就是通过 iOS 的捷径功能,模拟浏览器的 Get 请求,之后通过捷径自带的词典值相关操作序列化你需要的数据,用 Hey,Siri,帮我解锁工号,Siri 即可朗读出你需要的数据,是否解锁成功等信息,这样的操作来实现功能。

    IMG_0753.PNG

    • 目前我遇到的瓶颈是:由于系统改版现在在模拟登陆的过程中,需要提交三个参数,除了 name 、password,还有一个手机验证码,是该用户 ID 所绑定的手机号码,三个参数都发送给登陆接口,才能获得合法的 Cookie,继而才能实现之后的操作。
    • 然而由于是新手,每次访问 SpringBoot 的相关接口,会重新做一遍操作,那么程序中 get_code 参数会被执行很多遍,且携带验证码等三个参数登陆获取 Cookie 时,并没有有效的办法重复使用我需要的 Cookie,以及判断 Cookie 是否失效等。
    • 目前找到的相关办法 OkHttp 以及 Selenium,在 Java 中实现管理 Cookie,但暂未研究。

    我想实现的...

    • [ ] 模拟登陆,在 Spring 中新开接口专门用于获取内置管理员账号的验证码配合其他接口携带登陆 [未解决]
    • [ ] 在 Spring 中找到一种行之有效的办法管理 Cookie,保持有效性 [未解决]
    • [x] 解锁员工 mac 地址
    • [x] 登陆界面找到获取验证码的接口
    • [x] 登陆后找到解锁的接口
    • [x] 程序运行成功后返回标准 json

    [^本人是毕业一年的大专生,因为兴趣喜欢研究程序代码,以及自己感兴趣的东西,对于职业前辈来说可能我的实现过程比较幼稚简单奇怪,望见谅!]:

    诚信请教各位 V2er 的前辈们,Java 的前辈们以及各类在程序员奋斗的兴趣者们~

    7 条回复    2020-07-03 22:58:55 +08:00
    RayGZJ
        1
    RayGZJ  
    OP
       2020-07-02 23:20:40 +08:00
    不做白嫖党
    有偿解决
    EarthChild
        2
    EarthChild  
       2020-07-02 23:43:05 +08:00
    BOSS 直聘等 APP 上发布一条招聘信息吧。做完(完善)这个项目给多少钱。明码标价。
    RayGZJ
        3
    RayGZJ  
    OP
       2020-07-02 23:45:04 +08:00 via iPhone
    @EarthChild 可以这样搞!? 明天看一看,感谢回复🙏!
    EminemW
        4
    EminemW  
       2020-07-03 00:23:53 +08:00
    cookie -> 你确定不是 session ?
    EminemW
        5
    EminemW  
       2020-07-03 00:39:27 +08:00   ❤️ 1
    你用 spring boot 不也可以用 Jsoup 么,做法跟你第一版差不多。
    如果你说的手机验证码,是短信验证码,(在不能修改系统代码的情况下)那还是手打比较省事。
    正常来说,登录成功后系统下发的 sessionID 是有时效性的,你可以先用旧的 sessionID 请求解锁接口,失败的话再模拟登录。
    另外你想持久化所谓的 Cookie,用个文本文件也能存,搞个 MySQL 也能存。Redis 也能存
    singerll
        6
    singerll  
       2020-07-03 07:22:33 +08:00 via Android
    不是很明白,锁定信息存在哪里,数据库还是缓存,不能直接扫描数据库字段改后台吗。。。
    RayGZJ
        7
    RayGZJ  
    OP
       2020-07-03 22:58:55 +08:00 via iPhone
    @EminemW 认为可行 本周测试下 感谢🙏 写入文本应该简单些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1094 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:54 · PVG 02:54 · LAX 11:54 · JFK 14:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.