V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xutao881
V2EX  ›  程序员

我司 Java 后端的骚操作

  •  
  •   xutao881 · 2019-02-22 09:20:00 +08:00 · 19308 次点击
    这是一个创建于 2135 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们公司的多点登录一直没实现,今天早上公司的 JAVA 找我说,让我前端来实现用户的多点登录,只要把 sessionID 和 token 存下来就行了,我特么喵也是醉了,是我技术水平不够么?我怎么有点懵逼呢?用户多点登录居然让前端来做??

    155 条回复    2019-02-23 17:27:34 +08:00
    1  2  
    Klingon
        101
    Klingon  
       2019-02-22 12:40:26 +08:00
    多点登录,意思是好几个地方都得挨个登录
    xuxueli
        102
    xuxueli  
       2019-02-22 12:44:57 +08:00 via Android
    XXL-SSO 自荐一下!

    http://www.xuxueli.com/xxl-sso/
    Klingon
        103
    Klingon  
       2019-02-22 12:46:11 +08:00
    “我们想做的是多标签页,支持多用户登录”

    楼主实现了之后,指点我一下
    fleam
        104
    fleam  
       2019-02-22 12:49:09 +08:00 via Android
    有一种不靠谱的感觉呢。。。
    wolfie
        105
    wolfie  
       2019-02-22 12:55:52 +08:00
    @passerbytiny #92
    我怎么不懂 session 了?
    人后端明显要用 token 验证,用请求参数中的 session_id 取会话。
    fuxkcsdn
        106
    fuxkcsdn  
       2019-02-22 12:57:30 +08:00 via iPhone
    多标签多用户登陆确实应该前端做啊
    你前端要告诉后端当前标签是哪个用户,在后端当做是不同浏览器的不同用户登陆就得了,后端完全不需要做任何改动
    wolfie
        107
    wolfie  
       2019-02-22 12:57:30 +08:00
    @passerbytiny #92
    建议你说话前,先搞懂上下文。
    xxooxxooxxoxoxox
        108
    xxooxxooxxoxoxox  
       2019-02-22 13:05:26 +08:00
    楼上一堆半桶水程序员,正解的反而被喷了。。。
    laoyur
        109
    laoyur  
       2019-02-22 13:06:07 +08:00
    多标签页不同用户登录
    ----
    需求有点骚啊
    passerbytiny
        110
    passerbytiny  
       2019-02-22 13:13:13 +08:00
    @wolfie #105 建议你再去了解一下 token 验证,以及 token、会话、session_id 的关系
    @wolfie #107 再建议你说话前,先去看看楼主想要啥
    wly19960911
        111
    wly19960911  
       2019-02-22 13:22:16 +08:00
    这产品太骚了,不同标签页不同用户,要那么多用户干什么。免登录切换都可以
    mamahaha
        112
    mamahaha  
       2019-02-22 13:38:46 +08:00
    好多人不理解多点登陆是啥玩,包括我。我就不去搜了,大胆猜测一下,多点登录就是在多个终端上同时登陆进入一个账号,但是这个需要做啥?
    shyangs
        113
    shyangs  
       2019-02-22 14:06:45 +08:00
    Single Sign On 單一登入
    ShotaconXD
        114
    ShotaconXD  
       2019-02-22 14:31:46 +08:00
    楼主应该是想说单点登录吧...
    看上面一直在分析多点登录. 一句话需求做多了吗... 不问清楚就开始头脑风暴
    gamexg
        115
    gamexg  
       2019-02-22 14:31:47 +08:00
    多用户参考 google 的实现吧。

    需要根据具体业务来确定,单页前后端分离应用如果 api 设计够好()的确可以做到完全由前端搞定。

    比较推荐的还是 url 里面携带当前用户 id 用来解决新标签页打开链接丢失当前用户的问题。
    jingyulong
        116
    jingyulong  
       2019-02-22 14:59:35 +08:00
    好多人没搞懂,我来解释一下:同一个设备里面,多个账号登陆。同理,一个浏览器里面,开多个标签,对应多个用户,登陆同一个系统。相当于开多个隐私窗口。

    杠精不要再杠楼主了,只能说这个需求有点小众。

    日常生活中,这个需求也是存在的,比如微信多开,游戏多开。
    wolfie
        117
    wolfie  
       2019-02-22 15:03:50 +08:00
    @passerbytiny #110
    session_id != jessionid,说话请过脑。
    passerbytiny
        118
    passerbytiny  
       2019-02-22 15:07:54 +08:00
    @wolfie #116 接口 != 实现,你说这想表达啥意思
    just1
        119
    just1  
       2019-02-22 15:08:08 +08:00
    所以后端说的不是没错吗...........
    liuzhen
        120
    liuzhen  
       2019-02-22 15:08:11 +08:00
    原来这么多 V2 大神搞不懂单点登录是什么.

    楼主要多个标签页分别登录不同账户,登录后肯定是要前端来区分哪个标签页用哪个 token/cookie,后端怎么可能管你标签页的事情
    wolfie
        121
    wolfie  
       2019-02-22 15:09:24 +08:00
    @passerbytiny #118
    搞得好像全世界只有你自己才知道会话是什么意思,你看懂人家后端要 session_id 是干嘛的?
    no1xsyzy
        122
    no1xsyzy  
       2019-02-22 15:20:29 +08:00
    多标签页不同用户登录……
    这需求不如单标签页多用户登录简单
    一个 session 对多个 token 就行了吧,大不了自己维护 token
    shenyuzhi
        123
    shenyuzhi  
       2019-02-22 15:23:12 +08:00
    没有 server 的配合,是不可能单点登录,不然就是浏览器的严重的安全问题了。
    shenyuzhi
        124
    shenyuzhi  
       2019-02-22 15:25:07 +08:00
    好吧,没看清楚,说的是单设备多用户。
    这个可以参考下 Gmail。
    donnior
        125
    donnior  
       2019-02-22 15:29:27 +08:00
    10 年后端对什么是多点登录一脸懵逼。。。
    xuanbg
        126
    xuanbg  
       2019-02-22 15:52:20 +08:00
    SSO 肯定需要前端做的呀,光后端支持有个蛋用。。。
    JKeita
        127
    JKeita  
       2019-02-22 16:01:40 +08:00
    后端说得没错。。。肯定要前端存 token,然后每次请求把 token 带上来判断是哪个用户
    lrseee
        128
    lrseee  
       2019-02-22 16:06:55 +08:00
    多点登录?
    NullWithMe
        129
    NullWithMe  
       2019-02-22 16:12:11 +08:00
    java 后端:不被这个锅 233333
    laminux29
        130
    laminux29  
       2019-02-22 16:14:11 +08:00
    多标签登录多用户吗?实现很简单啊:

    新开一个页面,按有无前页面传值,分为 2 种情况:

    1.前页面无任何值传过来,则新页面按照无用户登录处理。

    2.前页面如果传递用户 id 过来,则让后台把该 id 对应的用户数据找出来显示在前端页面上,然后让后台把该页面上的所有能打开新页面的地方(比如链接)都带上这个值来做后续的值传递,不就行了。
    liuxey
        131
    liuxey  
       2019-02-22 16:25:33 +08:00
    你们吓得楼主不敢说话了,其实都是表达的问题,后端说给楼主听的时候没动听,楼主阐述的时候你们没听懂
    brant777
        132
    brant777  
       2019-02-22 16:28:57 +08:00
    多点登录 0.0....不做单点登录限制不就是多点登录吗?这应该是同终端多用户登录,要解决的应该是多用户登录后本地 token 被覆盖的问题
    66beta
        133
    66beta  
       2019-02-22 16:45:27 +08:00 via Android
    多标签页多用户,多开几个隐身模式不就行了,为什么还要特地开发

    另外这个需求的背景是什么?
    passerbytiny
        134
    passerbytiny  
       2019-02-22 16:56:19 +08:00
    @wolfie #120 我对你的无知和自以为是已经没办法了,退。既然你这么懂,那么你就好好教教楼主该怎么做吧。

    @laminux29 #128 漏洞:你的认证校验依据只有用户 ID,还是在 URL 上的,安全隐患极高。麻烦:所有链接都要加上与主功能无关的用户 ID,不是一般的麻烦。
    wolfie
        135
    wolfie  
       2019-02-22 17:11:15 +08:00
    @passerbytiny #134
    自己没理解人家讲的是什么,先来一句你先看看 xxx,结果被打脸就不敢继续说下去了?
    a15819620038
        136
    a15819620038  
       2019-02-22 17:25:52 +08:00
    多点登录?多端登录?
    kakudesu
        137
    kakudesu  
       2019-02-22 17:33:51 +08:00
    不懂,看大佬们辩论
    qianzhaoy
        138
    qianzhaoy  
       2019-02-22 17:50:42 +08:00
    chrome 插件 SessionBox ?
    123qqqqqq
        139
    123qqqqqq  
       2019-02-22 17:51:58 +08:00
    哈哈哈,成功逗笑了我
    Vegetable
        140
    Vegetable  
       2019-02-22 18:00:18 +08:00
    技术人员应该致力于解决问题.
    这个问题不是前端自己可以完美解决的.

    分析一下需求:
    核心:多个标签页维护不同的用户登陆状态

    需要解决的核心问题:
    > 怎么在相同 domain,不同标签页之间,维护不同的用户 state?

    因为 localstorage 和 cookie 是共享的,排除.

    不同标签页之间,可以说只有 js 变量空间里的变量值和 url 可以是不同的.从这两方面下手.

    * 如果将 state 维护在 js 变量里,刷新页面啥都没了,不行
    * 存在 url 里?也不合适,但是实际上是行得通的.

    为了避免刷新没,localstorage 或者 indexdb 必须要用,为了隔离,可以使用 url querystring 来保存用 tab 标识.


    那么方案应该是这样:

    * 登陆正常返回 token 和用户信息,以及一个**tab 标识**
    * 前端使用 tab 标识,在本地储存中建立容器隔离保存 state,需要保证一个默认容器
    * 所有 url 变更都要保留 tab 标识,一旦 url 失去了该标识,就只能指向默认那一个用户,当然也可以使用全局变量做备份

    * 定时清理

    这个思路做下来,功能倒是实现了,但是这需求真的有点...隐身模式学习一下吧...
    Vegetable
        141
    Vegetable  
       2019-02-22 18:01:31 +08:00
    @Vegetable 如果后端不在乎 url 被污染,其实 tab 标识可以前端自己生成
    freakxx
        142
    freakxx  
       2019-02-22 18:04:11 +08:00
    @Marstin

    是的,+1。


    所以我看不太懂盖了这 100 多层是在讨论什么了。。。
    imswing
        143
    imswing  
       2019-02-22 18:25:28 +08:00 via iPhone
    切换用户吗
    libook
        144
    libook  
       2019-02-22 18:46:05 +08:00
    “肇事女司机”,
    “黑人抢劫犯”,
    “素质低下的东北人”,
    “宰客的少数民族”,
    “傻✘Java 后端”……

    话说这和 Java 没关系吧。
    winglight2016
        145
    winglight2016  
       2019-02-22 19:00:54 +08:00
    按 lz #17 楼的回复,后台这么设计是没问题的,你搞不懂为什么,可以直接问他啊?同事之间有这么客气的吗?
    laminux29
        146
    laminux29  
       2019-02-22 19:18:38 +08:00
    @passerbytiny 我说用户 ID 只是为了方便他了解实现过程而已。生产时当然不会直接暴露用户 ID。
    laminux29
        147
    laminux29  
       2019-02-22 19:19:28 +08:00
    @passerbytiny 所有链接都要加上与主功能无关的用户 ID,一点都不麻烦,这正是框架要做的事情。
    JamesMackerel
        148
    JamesMackerel  
       2019-02-22 19:23:01 +08:00 via iPhone
    SSO 用 CAS 做其实还不错。
    kiddult
        149
    kiddult  
       2019-02-22 22:32:34 +08:00
    @mamahaha 看上面的评论,你还真理解错了。。。。。这产品超级骚
    palmers
        150
    palmers  
       2019-02-22 23:44:27 +08:00
    只这个话题来说 java 得罪谁了? 为什么是"java~ 后端"?
    lscho
        151
    lscho  
       2019-02-23 00:34:31 +08:00
    是你技术水平不够么?是!
    suley
        152
    suley  
       2019-02-23 12:32:37 +08:00
    @szpShang 莫非你是在开玩笑,cookie 注入一点也不比 session 难……
    Marstin
        153
    Marstin  
       2019-02-23 13:58:17 +08:00
    @wolfie block 他就好了,这帖子里很大一部分人都可以 block,无论是蠢还是杠,你都和他讲不通。
    Techzero
        154
    Techzero  
       2019-02-23 15:55:30 +08:00
    @Vegetable sessionStorage 不是共享的
    anypwx
        155
    anypwx  
       2019-02-23 17:27:34 +08:00
    这应该是单点登录吧,我 2014 年实习的时候单位领导让我一个月撸完,而且是自己手打,没有用框架。核心是基于 java 拦截器实现的。做完后提供给其他项目组使用,我把它做成了一个中间件。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2771 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:31 · PVG 22:31 · LAX 06:31 · JFK 09:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.