# springboot-experiment4 **Repository Path**: lirisheng/springboot-experiment4 ## Basic Information - **Project Name**: springboot-experiment4 - **Description**: 基于Spring Security码云OAuth2认证 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-22 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验四 基于Spring Security码云OAuth2认证 ## 一、 实验目的 1. 掌握使用Spring Security框架; 2. 掌握配置Spring Security的安全过滤链; 3. 掌握编写Spring Security单元测试; 4. 掌握创建接入码云的应用; 5. 掌握码云OAuth2认证基本流程; 6. 掌握使用码云API; 7. 了解使用模板引擎或前端框架制作用户登录界面。 ## 二、 实验环境 1. JDK 1.8或更高版本 2. Maven 3.6+ 3. IntelliJ IDEA`` ## 三、 实验任务 1. 步骤一:创建接入码云的应用。 ```java static final String CLIENT_ID = "6654183a670dffa76850a2e11bc02e8c1d1c5e2b0fcfb36b2b4d6af8f557eaf8"; static final String CLIENT_SECRET = "44a3cda6f1331e5cb53bda07c9ccbf4e2fe498bfc79bada436151850e8e7b0a6"; ``` 2. 步骤二:编写重定向过滤器的业务逻辑。
3. 步骤三:使用码云access_token API向码云认证服务器发送post请求获取access_token
4. 步骤四:使用码云API获取授权用户的资料
5. 步骤五:把自定义的两个Filter加进安全过滤链
6. 步骤六:把我们自定义的SecurityConfigurer应用到安全过滤链。
7. 步骤七:改造/user接口,返回码云用户资料给前端;改造user.ftlh模板用于显示用户资料。
8. 步骤八:编写单元测试。模拟一个登录用户,访问受保护的接口/test,断言接口的返回内容body部分是否一致
## 四、 实验结果截图 1. 测试/test接口
2. 访问/user
## 五、实验总结 1. spring security框架的整体介绍 1. 图例
2. 文字描述过程 1. `DelegatingFilterProxy`作为spring serurity的作用的入口,其作为filter bean注入到servlet container的filterchain中,`DelegatingFilterProxy`通过获取ioc容器中beanName为"springSecurityFilterChain"的`FilterChainProxy`bean,把工作委托给FilterChainProxy来完成
2. FilterChainProxy本质一个bean filter,,在其doFilter的方法中,迭代多条SecurityFilterChain,把第一个match(request)正确的securityFilterChain中的filtes获取出来,以virtalFilerChain的方式把执行这些filters,执行完这些filters后,则接着回到执行整个serlvet contianer 中的FilterChain中-语句`chain.doFilter(fwRequest, fwResponse);`
2. 在springboot启动时,自动注入哪些与spring security关键的组件呢 1. 在项目启动时,注入beanName为"springSecurityFilterChain"的`SecurityFilterProxy`
2. springboot的自动配置中,主动注入`DelegatingFilterProxy`