1、引入依赖 spring-boot版本2.7.3,如未特殊说明版本默认使用此版本
2、编写controller并启动springboot服务
3、自动配置SpringBootWebSecurityConfiguration
4、默认登陆页面DefaultLoginPageGeneratingFilter
4.1、SecurityFilterChainConfiguration默认实现的SecurityFilterChain
4.2、UsernamePasswordAuthenticationFilter
4.3、attemptAuthentication方法
4.4、 ProviderManager的authenticate方法
4.5、 AuthenticationProvider实现AbstractUserDetailsAuthenticationProvider中的authenticate方法
4.6、 UserDetails实现类DaoAuthenticationProvider的retrieveUser方法
4.7、UserDetailsService实现类InMemoryUserDetailsManager的loadUserByUsername方法
4.8、 UserDetailsService
4.9、 UserDetailsServiceAutoConfiguration
4.10、 SecurityProperties
5、 自定义认证
5.1、由于新版本的Security已经弃用WebSecurityConfigurerAdapter所以注册SecurityFilterChain即可
5.2、 自定义登陆页面
5.2.1、html
5.2.2、SecurityFilterChain配置
5.2.3、 controller
5.2.4、 自定义登陆使用的用户名和密码字段名使用usernameParameter和passwordParameter
5.3、 自定义认证成功后访问的页面
5.4、 前后端分离处理方式
5.4.1、 实现AuthenticationSuccessHandler接口
5.4.2、修改SecurityFilterChain配置
5.4.3、返回数据
6、 认证失败处理
6.1、org.springframework.security.authentication.ProviderManager#authenticate
6.2、org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter#doFilter(javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
6.3、 org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter#unsuccessfulAuthentication
6.4、 org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler#onAuthenticationFailure
6.5、 org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler#saveException
6.7、 前端取值展示
6.8、 前后端分离处理方式
6.8.1、 实现AuthenticationFailureHandler接口
6.8.2、修改SecurityFilterChain配置
7、 注销登录
7.1、 默认方式
7.2、 自定义方式
7.3、 前后端分离
7.3.1、 实现LogoutSuccessHandler接口
7.3.2、 修改SecurityFilterChain配置
8、获取用户认证信息
8.1、 使用代码获取
8.2、 前端页面获取
8.2.1、 引入依赖
8.2.2、 导入命名空间,获取数据
9、 自定义数据源
9.1、 流程分析
9.2、 修改WebSecurityConfigurer
9.3、 In-Memory Authentication
9.4、 JDBC Authentication
9.3.1、 引入依赖
9.3.2、 数据库表及连接地址配置
9.3.3、 修改SecurityFilterChain
9.5、扩展JDBC Authentication之mysql 表设计
9.5.1、引入依赖
9.5.2、配置数据库连接
9.5.3、编写实体类与Mapper User Role
9.5.4、实现UserDetailsService接口
9.5.5、指定认证数据源
10、自定义JSON认证,前后端分离
10.1、HttpSecurity过滤器方法介绍
10.2、自定义登录处理filter
10.3、配置文件编写
10.4、使用自定义filter注意事项
11、实现kaptcha图片验证码 引入依赖 1、编写kaptcha配置类 2、自定义异常
11.1、传统web开发方式 3、自定义Filter 4、提供生成验证码的接口 5、登录页面添加验证码 6、配置WebSecurityConfigurer
11.2、前后端分离方式 3、提供生成验证码的接口 4、自定义Filter 5、配置WebSecurityConfigurer
12、密码加密
12.1、不指定具体加密方式,通过DelegatingPasswordEncoder,根据前缀自动选择
12.2、指定具体加密方式
13、密码自动更新
14、Remember-Me
14.1、传统web方式
14.1.1、login.html
14.1.2、开启rememberMeServices
14.2、前后端分离
14.2.1、自定义RememberMeServices实现类
14.2.2、自定义认证方式
14.2.3、配置
15、会话管理
15.1、配置
15.2、共享会话
15.2.1、引入依赖
15.2.2、编写配置
16、CSRF防御
16.1、传统web开发
16.2、前后端分离开发
16.2.1、登陆页面不需要令牌
17、跨越处理
17.1、spring跨越处理
17.1.1、使用@CrossOrigin,可以作用到类上也可以作用到具体方法上
17.1.2、实现WebMvcConfigurer接口重写addCorsMappings方法
17.1.3、使用CorsFilter
17.2、SpringSecurity跨域处理
17.2.1、 Security配置
18、权限管理/授权
18.1、针对url配置
18.2、针对方法配置
19、基于数据库权限验证
19.1、表结构
19.2、sql
19.3、依赖,数据库配置
19.4、实体类与mapper
19.5、自定义的资源(url)权限(角色)数据获取类
19.6、自定义获取账号信息,与密码自动更新
19.7、自定义RememberMeServices实现类
19.8、Security配置类
20、OAuth2
20.1、基于gitee实现快速登陆
20.2、基于内存搭建授权服务器
20.3、基于redis搭建授权服务器 1、引入依赖,spirng-boot版本2.2.5.RELEASE 2、配置redis 3、Security配置类 4、自定义 授权服务器配置
20.4、基于redis搭建资源服务器 1、导入依赖 2、redis配置 3、自定义资源服务器配置 4、模拟资源
20.5、基于jwt搭建授权服务器 1、依赖导入,版本2.2.5.RELEASE 2、Security配置 3、jwt内容增强 4、授权服务器配置
20.6、基于jwt搭建资源服务器 1、依赖导入,版本2.2.5.RELEASE 2、资源服务器配置
遇到的问题
版本问题
1、springboot版本为2.6.1,spring-security-web版本为3.7.5,点击登录会有UsernamePasswordAuthenticationToken.unauthenticated方法找不到提示。
springboot版本切换为2.7.3后正常
2、写法区别,spring-security-web版本3.7以上,WebSecurityConfigurerAdapter废弃,可不使用
语法问题
1、Spring Boot请求403 Forbidden错误
Spring Security默认开启了csrf攻击防护,它强迫去验证token