网站的自动登录

参考:https://blog.csdn.net/qq_20597149/article/details/77692934
感觉描述的相当到位,复写一份留作记录

当然自动登录的功能设计必须要在浏览器的Cookie中保留账户的登录凭证(token),这个登录凭证是被当作用户登录的登录钥匙。用户在登录时,凭借浏览器发送的token与服务器端保存的token做比较,若2个token一致,则通过验证,若不一致,则验证失败。

    token的产生最好具有一定的随机性,可以加入日期,随机数等等,然后通过一些不可逆的算法加密,如:

String token = Utils.MD5(user.getUsername() + System.currentTimeMillis());

这样token就不会泄露用户的信息,安全性上得到了保证。token产生后,先将其保存到数据库中,用于以后的验证,接着将其发送给浏览器,保存在客户端的Cookie中。参考代码如下,这里Cookie的有效设置为10天,也就说10后,这个Cookie就会失效:

Cookie cookieToken = new Cookie(“token”, token);
cookieToken.setMaxAge(10 * 24 * 60 * 60); // 10 days
cookieToken.setPath("/");
response.addCookie(cookieToken);

下面是在spring MVC框架下用户请求登录页面的实现代码(此处的功能应该加在检测是否登录的Filter中,因为用户的每次请求都会验证用户是否登录,若未登录,即可在验证token,通过token来实现自动登录):

@RequestMapping(value = “/login”, method = RequestMethod.GET)
public String login(@CookieValue(value=“token”, required=false) String token) {
if (!StringUtils.isEmpty(token)) {
if (this.userService.checkToken(token)) {
updateCookie(); // 刷新token
createSession(); // 创建Session
return “redirect:/user/list”;
}
}
return “admin/login”;

}

浏览器在请求登录界面的时候,会带上token,这时候服务器端的程序会拿到这个token,如果token存在且不为空,会将它与存放在数据库中的token进行比较,若一致,则通过验证,登录成功;若不一致,则登录失败。

    验证成功: 更新token,也就说一个token只能登录验证一次,验证成功后,就会更换新的token

    验证失败: 跳转到登录页面

你可能感兴趣的:(JavaEE)