# spring-security-demo02 **Repository Path**: johnyucn525/spring-security-demo02 ## Basic Information - **Project Name**: spring-security-demo02 - **Description**: 演示基于spring-boot 3.3.2 的认证授权流程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: InMemoryUserDetailsManager - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-23 - **Last Updated**: 2024-08-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 演示基于spring-boot 3.3.2 的认证授权流程 ![flow1.png](images%2Fflow1.png) ## 版本V1.0.2 ### 功能: 1. 自定了 UserDetailService,但仍然使用内存数据,做为认证依据 ## 版本V1.0.1 ### 功能: 1. 以配置方式定义用户认证信息 2. 在/books 中获取用户信息 3. 配置了过滤器链,关闭了csrf,并实现了自定义的认证逻辑 ## 版本V1.0 ### 功能: 1. 引入项目依赖 2. 加入自定义的资源 /books ### 说明: 1. 此时的认证授权流程是默认的表单流程,使用的是内存中的用户信息,密码由项目启动时自动生成(见控制台输出),用户名为user,密码为随机生成的 2. 访问/books 时,需要登录,登录成功后才能访问/books 3. 对外开放的默认资源为: - GET /login : 去登录页面 - POST /login: 登录 - GET /logout: 去退出登录面 - POST /logout: 退出登录 - 其它资源全部需要登录后才能访问,并且并不需要有角色 - 可以认为是对过滤器链进行了如下的默认配置: ```java @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)) .formLogin(Customizer.withDefaults()) .httpBasic(Customizer.withDefaults()) .logout(Customizer.withDefaults()) .authorizeHttpRequests(authorizeRequests -> authorizeRequests .anyRequest().authenticated()); return http.build(); } ``` 4. 访问 GET /login 时,会跳转到登录页面,其中的表单提交地址为 POST /login, 表单提交有三个参数:username,password,_csrf,其中_csrf是spring-security的防跨站请求伪造的token 5. 访问 POST /login 时,需要提供:username=user&password=【随机密码】&_csrf=【上一步从页面获取到的值】 此时会进行认证,认证成功后,会在session中保存认证信息,然后我们再访问 /books时(使用了上一步的cookie),会发现已经可能访问了 6. 具体测试见:test.http