首页 > 其他分享 >springboot学习之十五(Spring Security-记住我Remember me)

springboot学习之十五(Spring Security-记住我Remember me)

时间:2023-07-25 14:22:24浏览次数:31  
标签:me obj springboot 登录 Spring persistent token 记住

 

一.记住我概述
1.1.什么是记住我

Remember me(记住我)记住我,当用户发起登录勾选了记住我,在一定的时间内再次登录就不用输入用户名和密码了,即使浏览器退出重新打开也是如此。

1.2.流程分析

在SpringSecurity中提供RememberMeAuthenticationFilter过滤器来实现记住我功能,其核心流程如下:

 

1.认证成功UsernamePasswordAuthenticationFilter会调用RememberMeServices创建Token
(见其父类AbstractAuthenticationProcessingFilter.successfulAuthentication),同时 RemeberMeService 会调用TokenRepository将Token写入数据库(persistent_logins),然后 RemeberMeService通 过Reponse.addCookie把Token写到浏览器的Cookies中

2.当浏览器再次发起请求会进入RemeberMeAuthenticationFilter,该Filter获取到请求中的token交给RemeberMeService

3.RemeberMeService调用TokenRepository去数据库中根据Token查询用户名

4.调用UserDetilasService.loadUserByUsername根据用户名获取用户认证信息

5.通过authenticationManager.authenticate,做一次认证,然后把用户信息放入上下文对象中

二.编码实战

2.1.修改该登录页

<div class="checkbox">
<label><input type="checkbox" id="rememberme" name="remember-me"/>记住我</label>
</div>

增加记住我的选择框,注意name一定是”remember-me”

2.2.配置TokenRepository

PersistentTokenRepository是指明token的持久化方案(即用来存储“记住我”相关信息)。remember me功能是基于token,持久化方案有两种,一种基于内存,使用的是InMemoryTokenRepositoryImpl,一种基于数据库,使用的是JdbcTokenRepositoryImpl。这里我选择基于数据库的方式。

@Autowired
private DataSource dataSource ;

@Bean
public PersistentTokenRepository persistentTokenRepository(){
     JdbcTokenRepositoryImpl obj = new JdbcTokenRepositoryImpl();
     obj.setDataSource(dataSource);
    //启动创建表persistent_logs表,存token,username时会用到
    //如果token表不存在,使用下面语句可以初始化该表;若存在,请注释掉这条语句,否则会报错。
     obj.setCreateTableOnStartup(true);    
     
     return obj;
}

 

配置持久化方案,用来存储“记住我”相关信息到数据库
如果:设置了“ obj.createTableOnStartUp(true);”之后会自动创建表persistent_logs,就不用再手动创建表。

 

2.3.配置rememberMe

修改认证服务配置WebSecurityConfig的 HttpSecurity配置,增加rememberMe

 

@Autowired
private UserDetailsService userDetailsService;
http.rememberMe()
                .tokenRepository(persistentTokenRepository())    //持久
                .tokenValiditySeconds(3600)    //过期时间
                .userDetailsService(userDetailsService); //用来加载用户认证信息的

2.4.创建persistent_logins 的表

注意,如果设置了 createTableOnStartUp(true); 就不用再执行该SQL

CREATE TABLE persistent_logins (
username varchar(64) NOT NULL DEFAULT ‘’,
series varchar(64) NOT NULL,
token varchar(64) NOT NULL,
last_used timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (series)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.5.测试

1.访问登录页面进行登录,勾选记住我
2.登录成功后,退出浏览器
3.重新打开浏览器,直接访问资源-不需要登录就能访问

 

 

转 : https://blog.csdn.net/qq_32115993/article/details/109217721

 https://www.cnblogs.com/jiezao/p/13748549.html

https://www.cnblogs.com/fanqisoft/p/10630631.html

 

标签:me,obj,springboot,登录,Spring,persistent,token,记住
From: https://www.cnblogs.com/fps2tao/p/17579713.html

相关文章

  • JMeter07-JMeter运行原理
    JMeter支持的协议Web:HTTP、HTTPSSOAP简单对象访问协议FTP、TCPLDAP:轻量目录访问协议面向消息的中间件(通过JMS)JMeter包括JMSAPIjar包,但不包括JMS客户端实现。如果要运行JMS测试,则需要从JMS提供下载适当的jar包。邮件:SMTP(S)、POP3(S)、IMAP(S)JDBC、MongoDB(NoSQL)......
  • 强制删除namespace
    之前部署过一套监控因为是本地测试环境,资源不太够,想着进行删除命名空间monitoring[root@k8s-master01]#kubectldeletensmonitoringnamespace"monitoring"deleted^C[root@k8s-master01]#kubectldeletensmonitoringnamespace"monitoring"deleted^C[root@k8s-......
  • memcpy/memmove模拟实现
    void*my_memmove(void*dest,constvoid*src,size_tnum){ assert(dest&&src); void*ret=dest; if((char*)dest<(char*)src)//从前向后移 { while(num--) { *(char*)dest=*(char*)src; dest=(char*)dest+1; src=(char*)src+1; } } else......
  • PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素
    原文链接:http://tecdat.cn/?p=24346最近我们被客户要求撰写关于用户流失数据挖掘的研究报告,包括一些图形和统计输出。在今天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的争夺上“用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客户。但是企......
  • [可用]Sublime Text 4 for Mac
    问题mac上默认编辑器很不好用,找一个替代品sublime值得选择解决https://www.jb51.net/softs/211486.htmlenvmacintel00、下载地址https://pan.baidu.com/s/1RtYyIWhM18OWzdsvLzinvw?pwd=z1ap01、双击安装02、license......
  • 918. Maximum Sum Circular Subarray (Medium)
    Description918.MaximumSumCircularSubarray(Medium)Givenacircularintegerarraynumsoflengthn,returnthemaximumpossiblesumofanon-emptysubarrayofnums.Acirculararraymeanstheendofthearrayconnectstothebeginningofthearray.F......
  • DataFrame筛选多行和多列
    Dataframe筛选多行在实际数据筛选的时候,有时候需要选择多行,例如,有一个列表数据,需要在Dataframe里筛选,某列中在列表数据中的行。在这种情况下可以使用isin语法。具体如下:obj_df=df[df['obj_col'].isin(obj_list)]#筛选的行non_obj_df=df[~df['obj_col'].isin(obj_list)]......
  • 题解 P2903 【[USACO08MAR]The Loathesome Hay Baler S】
    postedon2021-05-0320:50:49|under题解|source首先输入,记录一下哪个齿轮的位置在\((0,0)\),哪个在\((x_t,y_t)\)。接着,为了避免多次判断两个齿轮相切而超时,我们可以预处理一个\(link_{i,j}\),表示第\(i\)个齿轮是否和第\(j\)个齿轮相切。这部分直接\(O(n^2)\)暴......
  • 聚焦操作系统迁移实践与生态发展 | openEuler Meetup 长沙站圆满结束
    活动回顾12月23日,由openEuler社区和湖南欧拉生态创新中心主办,麒麟信安和湖南省鲲鹏生态创新中心协办的openEuler Meetup 长沙站举办。本次活动集聚社区开发者、用户、企业伙伴、操作系统爱好者,围绕操作系统搬迁进行交流和实践,正式发布《湖南欧拉生态发展白皮书》,并在活动上成立op......
  • 免费MES 系统产品介绍
    为了提高生产效率和降低企业成本,更多的企业愿意去使用mes系统,因为mes系统可以提供数据分析、生产建模、生产管理、搭建流程。设备管理、绩效考核、质量管理等强大功能。但对于中小企业来说,直接去购买整套mes系统要价过高,与公司预算有出入。针对这些企业的需求,万界星空研发出一款免......