Heim  >  Fragen und Antworten  >  Hauptteil

java – Informationen zum Design des Spring MVC-Anmeldesystems

Meine aktuelle Idee ist, ein User对象,其中包括uid, username, password, isLogined等。然后设置一个拦截器,在用户第一次请求(session开始)的时候,从数据库中根据user.isLogined判断用户是否登录,如果登录了就在session级别上设置isLogined gleich „true“ zu definieren, andernfalls wird zur Anmeldeseite weitergeleitet.

Aber wie soll ich in diesem Fall die Identität des Benutzers feststellen, wenn der Benutzer die erste Anfrage stellt? Wenn uid im Cookie gesetzt ist, kann diese UID von anderen gefälscht werden, was ein potenzielles Sicherheitsrisiko darstellt.

Gibt es eine gute Lösung für dieses Problem?

Ergänzung

Mein Hauptproblem besteht darin, die Legitimität der Anmeldeidentität des Benutzers zu beurteilen. Jetzt ist es meine Idee, die Benutzer-ID zu verschlüsseln und in einem Cookie zu speichern, sodass andere nichts tun können, selbst wenn sie ihn kennen Benutzer-ID. Ich würde gerne fragen, ob das sinnvoll ist.

天蓬老师天蓬老师2712 Tage vor537

Antworte allen(4)Ich werde antworten

  • 滿天的星座

    滿天的星座2017-05-17 10:10:17

    这个风险好大:uid修改为别人的,碰巧那人也登录了,那么就以别人的身份登录了

    沿着你的方案走:
    1,cookie的uid设置为加密的,或者是无意义的随机串
    2,用这个串和db里比对,或者和cache里的比对,同时校验ip或者user agent加强安全性
    3,要考虑会话过期策略

    Antwort
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-17 10:10:17

    首先你的数据库中需要先存储用户信息,设置isLogined 默认为FALSE,每次登陆成功后更新为TRUE,退出后更新为FALSE;判断登陆成功的标志用userName userPass 匹配,还有isLogined 判断;最后设置判断级别,先isLogined用户密码

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-17 10:10:17

    建议登录状态不要存储在数据库中,至少也别存在关系型数据库中;可以在用户登录校验完成后,返回token,之后用户的所有请求在headers的authorization字段都带上这个token;可以去了解一下jwt及相关实现

    Antwort
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-17 10:10:17

    就按你现在的方式,如果我一个匿名用户,没登录,去请求你的某个接口,然后被拦截从数据库中根据user.isLogined判断用户是否登录,那么问题来了。你user.isLogined中的这个user是谁呢?


    建议直接登录后把用户登录成功信息放session里,请求的时候拦截器去验证session就好了,不要去访问数据库,每次请求都有这一个访问数据库操作很有消耗的。

    Antwort
    0
  • StornierenAntwort