我试图在验证时避免数据库访问以提高性能
经过大量搜索之后的有效解决方案似乎是在cookie中存储加密字符串并尝试在验证时对其进行解密。
因此,我想知道以下是否是一个好主意:
如果它是一个“OK”的想法,我该如何让它真正起作用,如:
我应该使用什么加密方法,AES-256?
如何使用Bouncycastle在Java中进行这种加密/解密?
如果不是一个好主意,我该怎么做才能避免在身份验证时查询数据库?
提前结束!答案 0 :(得分:0)
您在上面描述的问题称为“RememberMe”。 解决问题的两种方法:
1)创建自己的身份验证框架。
成功验证后,在cookie中加入一个用户名的加密值(我强烈建议不要使用散列;也请不要输入用户密码值)。
Cookie应该最多持续2周。
对于加密,请使用BouncyCastle的AES-256加密: How to use Bouncy Castle lightweight API with AES and PBE 请不要在cookie中添加任何简单的值。 如果您的框架成功解密cookie - 用户已通过身份验证。如果您的框架无法解密cookie或cookie不存在 - 用户未经过身份验证。 注销后请清理cookie。
2)请考虑使用Spring Security框架: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html
这是一个很棒的框架,解决了很多身份验证/授权问题。
“RememberMe”功能解决了您的问题: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-remember-me
如果您需要任何其他说明,请告诉我。
致以最诚挚的问候,
迈克尔