当前位置: 首页 > 编程笔记 >

spring security实现下次自动登录功能过程解析

孙才捷
2023-03-14
本文向大家介绍spring security实现下次自动登录功能过程解析,包括了spring security实现下次自动登录功能过程解析的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了spring security实现记住我下次自动登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、原理分析

第一次登陆时,如果用户勾选了readme选项,登陆成功后springsecurity会生成一个cookie返回给浏览器端,浏览器下次访问时如果携带了这个cookie,springsecurity就会放行这次访问。

二、实现方式

2.1 简单实现方式

(1) 在springsecurity的配置文件中,http节点下增加一个remember-me配置

<security:http auto-config="true" use-expressions="false">
  <!-- 配置链接地址,表示任意路径都需要ROLE_USER权限,这里可以配置
   一个逗号隔开的角色列表-->
  <security:intercept-url pattern="/**" access="ROLE_USER"/>

  <!--自定义登录页面-->
  <security:form-login login-page="/login.html" login-processing-url="/login"
        username-parameter="username" password-parameter="password"
        authentication-failure-forward-url="/failed.html"
        default-target-url="/index.html"

  />
  <!--关闭csrf,默认是开启的-->
  <security:csrf disabled="true"/>

  <security:remember-me remember-me-parameter="remembermeParamater" />
  <!-- 退出 -->
  <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.html"/>
 </security:http>

其中remember-me-parameter="remembermeParamater"指定前台传递的是否rememberme的参数名,前台要传递的参数值是true或false

(2)前台登录页面上增加一个checkbox

<form action="/login" method="post">
  用户名:<input type="text" name="username" placeholder="请输入用户名"><br>
  密 码:<input type="password" name="password" placeholder="请输入密码"><br>
  记住我:<input id="_spring_security_remember_me" type="checkbox" name="remembermeParamater" value="true">
  <input type="submit" value="登录">
 </form>

checkbox的name属性要和上边配置文件中的remember-me-parameter="remembermeParamater"保持一致。

(3)测试

启动工程,进行登录,登录成功后观察cookie,会发现服务器端返回了一个名为remember-me的cookie

现在关闭浏览器,再次打开并访问,只要不清除cookie就可以直接访问资源,不需要重新登录。

这种方式有个弊端,浏览器端要携带的这个cookie值服务端是存放在内存中的,并没有进行持久化,所以如果服务重启后服务器端存储的这个值就会丢失,浏览器端的rememberme就会失效。为了解决这个问题就需要将服务器端生成的这个cookie值持久化到数据库中。

2.2 数据库实现方式

(1)创建一张表用来持久化rememberme的记录

-- 创建记录rememberme记录的表

CREATE TABLE persistent_logins
(
 username VARCHAR(64),
 series VARCHAR(64),
 token  VARCHAR(64),
 last_used DATE 
 );

(2)将spring-security 配置文件中的rememberme标签的内容改为如下内容

<security:remember-me remember-me-parameter="remembermeParamater" data-source-ref="dataSource"
        token-validity-seconds="86400"/>

data-source-ref="dataSource"用来指定数据源,spring-security通过数据源来操作数据库中的persistent_logins表

token-validity-seconds表示rememberme的有效时间,以秒为单位,这里的86400=24*3600表示一天

(3)测试

启动工程,进行登录,登录成功后会在persistent_logins表中生成一条记录,

关闭浏览器再次访问时会根据浏览器中携带的cookie值来查找数据库中的这条记录,如果查询到了就认证通过

三、区分是密码登录还是rememberme登录

在用户进行一些敏感操作时,需要区分是否是rememberme登录,如果是需要让用户跳转到登录页面。

在congtroller层提供一个方法来进行判断

@GetMapping("/isRemembermeUser")
public boolean isRemembermeUser(){
 Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
 if(authentication==null){
  return false;
 }
 //判断当前用户是否是通过rememberme登录,是返回true,否返回false
 return RememberMeAuthenticationToken.class.isAssignableFrom(authentication.getClass());
}

先使用密码登录,访问http://localhost/user/isRemembermeUser.do,后台接口返回false,再关闭浏览器再次访问这个地址,后台接口返回true,表示这次是使用rememberme进行的认证。

测试工程代码的地址:工程示例

 类似资料:
  • 本文向大家介绍SpringBoot 配合 SpringSecurity 实现自动登录功能的代码,包括了SpringBoot 配合 SpringSecurity 实现自动登录功能的代码的使用技巧和注意事项,需要的朋友参考一下 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事。 自动登录功能

  • 本文向大家介绍java web实现自动登录功能,包括了java web实现自动登录功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java web实现自动登录功能的具体代码,供大家参考,具体内容如下 主要思路就是:当用户访问网站的首页时,浏览器端会先检擦浏览器中存在的cookie中是否又登录的用户的用户名,如果有,则直接跳转至用户登录好的界面,如果没有,则重定向至登录界面,在服务

  • 本文向大家介绍基于spring security实现登录注销功能过程解析,包括了基于spring security实现登录注销功能过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于spring security实现登录注销功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、引入maven依赖 2、Security

  • 本文向大家介绍shell脚本通过expect实现自动单边无密登录功能,包括了shell脚本通过expect实现自动单边无密登录功能的使用技巧和注意事项,需要的朋友参考一下 最近项目需要实现单边无密登录,去网上搜索了下相关文章,实践之后发现几乎都不能用。于是结合expect的使用方法自行写了一个,通过验证可用。现在总结在这供需要的朋友参考。 代码如下: 以上所述是小编给大家介绍的shell脚本通过e

  • 本文向大家介绍springmvc下实现登录验证码功能示例,包括了springmvc下实现登录验证码功能示例的使用技巧和注意事项,需要的朋友参考一下 总体思路,简单讲,就是后台生成图片同时将图片信息保存在session,前端显示图片,输入验证码信息后提交表单到后台,取出存放在session里的验证码信息,与表单提交的验证码信息核对。 点击验证码图片时,通过jquery重新请求后台生成验证码图片方法,

  • 本文向大家介绍Python实现注册、登录小程序功能,包括了Python实现注册、登录小程序功能的使用技巧和注意事项,需要的朋友参考一下 主要实现功能 1、用户输入用户名,在用户名文件中查找对应的用户,若无对应用户名则打印输入错误 2、用户名输入正确后,进行密码匹配。输入密码正确则登录成功,否则重新输入。 3、连续输错三次密码则该用户名被锁,退出程序 ------------------------