java - 关于Spring MVC登录系统的设计
天蓬老师
天蓬老师 2017-05-17 10:08:17
0
4
451

我现在的想法是定义一个User对象,其中包括uid, username, password, isLogined等。然后设置一个拦截器,在用户第一次请求(session开始)的时候,从数据库中根据user.isLogined判断用户是否登录,如果登录了就在session级别上设置isLogined等于true,否则就重定向到登录页面。

但是这样的话在用户第一次请求的时候,我应该如何判断用户的身份?如果通过在cookie中设置uid的话,这个uid可以被其他人伪造,有潜在的安全风险。

请问对于这个问题,有什么好的解决方案?

补充

我主要的问题就是如何判断用户登录身份的合法性,现在我的想法是将user id加密之后保存到cookie当中,这把密钥只有我一个人知道,这样别人即使知道user id也没有办法,请问这样是否合理。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(4)
滿天的星座

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

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

我想大声告诉你

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

Ty80

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

过去多啦不再A梦

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


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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!