您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 经常上网的人都应该有这样的体验:很多网站或者APP只需要第一次登录时输入用户名和密码之后,后面很长一段时间内就不需要再次输入密码了。这确实是一个非常好的体验,不然每次都让人输用户名和密码就太麻烦了。Spring Security也提供了这样的功能,也就是Remember-Me(记住我)。要实现这个功能也异常简单:只需要稍稍修改一下WebSecurityConfiguration即可://控制逻辑@Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{http.aut
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ Spring Security使用MySQL保存cookie记录虽然方便,但是目前更多的主流互联网应用都是用NoSQL来保存非业务数据的,SpringSecurity也应该可以实现这个功能。之前Spring Security官方并不支持使用NoSQL来保存cookie,但这个问题对于一个爱钻研的码农来说应该只是个小CASE——毕竟只要有代码,就没有搞不定的问题——受JdbcTokenRepositoryImpl的启发,查看其源码,可以发现JdbcDaoSupport只是用来提供数据源,无实际意义,而PersistentTokenRepos
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ Spring Security使用MySQL保存cookie记录虽然方便,但是目前更多的主流互联网应用都是用NoSQL来保存非业务数据的,SpringSecurity也应该可以实现这个功能。之前Spring Security官方并不支持使用NoSQL来保存cookie,但这个问题对于一个爱钻研的码农来说应该只是个小CASE——毕竟只要有代码,就没有搞不定的问题——受JdbcTokenRepositoryImpl的启发,查看其源码,可以发现JdbcDaoSupport只是用来提供数据源,无实际意义,而PersistentTokenRepos
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 有时某些业务或者功能,需要在用户请求到来之前就进行一些判断或执行某些动作,就像在Servlet中的FilterChain过滤器所做的那样,SpringSecurity也有类似机制。SpringSecurity有三种增加过滤器的方式:addFilterBefaore()、addFilterAt()和addFilterAfter(),也可以disable掉默认的过滤器,例如:1、http.logout().disable();或者http.headers().disable();2、用自定义过滤器http.addFilterAt(newMyL
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 有时某些业务或者功能,需要在用户请求到来之前就进行一些判断或执行某些动作,就像在Servlet中的FilterChain过滤器所做的那样,SpringSecurity也有类似机制。SpringSecurity有三种增加过滤器的方式:addFilterBefaore()、addFilterAt()和addFilterAfter(),也可以disable掉默认的过滤器,例如:1、http.logout().disable();或者http.headers().disable();2、用自定义过滤器http.addFilterAt(newMyL
接下来几个章节,将逐个介绍身份验证流程中主要接口接口描述UserDetails代表SpringSecurity所看到的用户GrantedAuthority定义应用程序目的范围内允许用户执行的操作(读、写、删除等)UserDetailsService表示用于按用户名检索用户详细信息的对象UserDetailsManager一个较为特殊的UserDetailsService接口。除了按用户名检索用户外,它还可以用于更改用户集合或特定用户PasswordEncoder指定如何对密码进行加密或哈希化,以及检查给定的已编码字符串是由与明文密码匹配本文将一起学习相对独立的PasswordEncoder。一
接下来几个章节,将逐个介绍身份验证流程中主要接口接口描述UserDetails代表SpringSecurity所看到的用户GrantedAuthority定义应用程序目的范围内允许用户执行的操作(读、写、删除等)UserDetailsService表示用于按用户名检索用户详细信息的对象UserDetailsManager一个较为特殊的UserDetailsService接口。除了按用户名检索用户外,它还可以用于更改用户集合或特定用户PasswordEncoder指定如何对密码进行加密或哈希化,以及检查给定的已编码字符串是由与明文密码匹配本文将一起学习相对独立的PasswordEncoder。一
过滤器链分析 提起SpringSecurity的实现原理,很多读者都会想到过滤器链。因为SpringSecurity中的所有功能都是通过过滤器来实现的,这些过滤器组成一个完整的过滤器链。那么,这些过滤器链是如何初始化的?我们前面反复提到的AuthenticationManager又是如何初始化的?通过前面章节的学习,相信读者己经有了一些认识,本章我们将从头开始,分析SpringSecurity的初始化流程,同时再通过六个案例来让读者深入理解并且学会如何制作过滤器链。由于初始化流程相对复杂,因此我们没有选择在一开始就讲解SpringSecurity初始化流程,而是放到本节。当读者对于Sprin
过滤器链分析 提起SpringSecurity的实现原理,很多读者都会想到过滤器链。因为SpringSecurity中的所有功能都是通过过滤器来实现的,这些过滤器组成一个完整的过滤器链。那么,这些过滤器链是如何初始化的?我们前面反复提到的AuthenticationManager又是如何初始化的?通过前面章节的学习,相信读者己经有了一些认识,本章我们将从头开始,分析SpringSecurity的初始化流程,同时再通过六个案例来让读者深入理解并且学会如何制作过滤器链。由于初始化流程相对复杂,因此我们没有选择在一开始就讲解SpringSecurity初始化流程,而是放到本节。当读者对于Sprin
1.用户定义 在前面的案例中,我们的登录用户是基于配置文件来配置的(本质是基于内存),但是在实际开发中,这种方式肯定是不可取的,在实际项目中,用户信息肯定要存入数据库之中。 SpringSecurity支持多种用户定义方式,接下来我们就逐个来看一下这些定义方式。通过前面的介绍(参见3小节),大家对于UserDetailsService以及它的子类都有了一定的了解,自定义用户其实就是使用UserDetailsService的不同实现类来提供用户数据,同时将配置好的UserDetailsService配置给AuthenticationManagerBuilder,系统再将UserDetailsS