spring security 自动登录

Spring Security记住自动登录,安全和便捷

用户登录网后,一般情况为了用户的账号安全如果停留网站太久没有操作,或者隔一段时间再打开,浏览器就会跳转到用户的登录界面,但是如果是自己的电脑,设置了屏幕锁密码,又经常访问的网站,就会想让它自动登录。所以有的网站登录页多一个勾选的按钮有了免登录三天,或者自动登录。

自动登录实现原理

在用户勾选自动登录成功后,后端生成两个cookie浏览器本地存储,set-cookie remember-me来存储免登录用户名,过期时间。cookie session标识当前用户登录会话标识。等用户当前会话过期后,就会用每次请求带的remember-me的cookie信息去登录,这样就实现用户自动登录。

Spring Security 免登录实现

上文介绍到Spring security 的核心是过滤链SecurityFilterChain,
用户登录匹配到对应过滤器UsernamePasswordFilter进行业务逻辑处理。
用户登录成功后调用RememberMeService.loginSeccess(),
用户失败时也调用RememberMeService.loginFail(),当用户的会话过期后调 匹配到它过滤器RememberMeServie.autoLogin()进行自动登录。

1、TokenBased 简单实现

TokenBasedRememberMeServices生成remember-me的cookie规则如下

base64(username + ":" + expirationTime + ":" + algorithmName + ":"
algorithmHex(username + ":" + expirationTime + ":" password + ":" + key))
  • username: 用户名
  • password: 密码
  • expirationTime:有效期
  • key:加密key
  • algorithmName: 加密签名

用户自动登录,通过解析cookie,用冒号切分,第一个是username,第二是有效期,第三个是签名。userDetailService查询用户名找到用户信息,进行签名对比校验通过即自动登录成功。

2、PersistentTokenBased 存储实现

PersistentTokenBasedRememberMeServices 是实现token存储后端的方式,一种是具有内存,一种是基于数据库存储。

  • InMemoryTokenRepositoryImpl
  • JdbcTokenRepositoryImpl

前端cookie:remember-me的生成规则:

base64(series:token)
  • username:用户名
  • series:作为id查询
  • token:登录凭证
  • last_used:有效时间

3、RememberMeFilter 自动登录

RememberMeAuthenticationFilter 拦截器进行自动登录,dofilter方法里面两段核心代码,获取rememberMeAuth登录

Authentication rememberMeAuth =  this.rememberMeServices.autoLogin(request, response);
rememberMeAuth = this.authenticationManager.authenticate(rememberMeAuth);
    

参考样例

spring-security-easy-sample是集成spring-security-easy-starter的参考样例工程。初始化数据脚本后启动样例工程,登录访问路径 http://localhost:9080/static/index.html

1、参考配置文档application-local.yml
2、参考readme文档
3、用户名密码 + 图形验证码登录

代码仓库
https://gitee.com/fjh2017/spring-security-easy-starter

本文由mdnice多平台发布

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值