# 基于Spring Security码云OAuth2认证 **Repository Path**: Sakurazjp/springboot-project4 ## Basic Information - **Project Name**: 基于Spring Security码云OAuth2认证 - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-05-25 - **Last Updated**: 2021-08-08 ## 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. 登录码云 2. OAuth2基本认证流程
输入图片说明
输入图片说明
3. 步骤一:创建接入码云的应用。码云参考文档:https://gitee.com/api/v5/oauth_doc#/list-item-3 - 回调地址必须是:http://localhost:8080/login/oauth2/code/gitee - 创建应用
输入图片说明
- 获取Client ID和Client Secret
输入图片说明
4. 步骤二:编写 **重定向过滤器** 的业务逻辑 - 当用户访问/oauth2/gitee时,本重定向过滤器拦截请求,并将用户重定向到码云第三方认证页面上。 - 在程序内部请求外部API接口时,可以使用RestTemplate或WebClient的http客户端,详情参考:[WebMvc Client 官方参考文档](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#webmvc-client) - 在构造uri时,可以使用Spring框架内部提供的工具类UriComponentsBuilder,详细请参考:[UriComponentsBuilder官方参考文档-Mvc Uri Building](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-uri-building)
输入图片说明
5. 步骤三:使用码云access——token API 向码云认证服务器发送post请求获取access——token。 - 逻辑参考:UsernamePasswordAuthenticationFilter
输入图片说明 6. 步骤四:使用码云API获取授权用户的资料。 - 码云参考文档:https://gitee.com/api/v5/swagger#/getV5User
输入图片说明 7. 步骤五:把自定义的两个Filter加进安全过滤链 - 注意:不要添加自定义过滤器放置在SecurityContextPersistenceFilter前面。 - 官方参考文档-Spring Security内置的过滤器顺序:https://docs.spring.io/spring-security/site/docs/current/reference/html5/#servlet-security-filters - Spring Security框架在初始化一条过滤器链时,默认添加了一些过滤器,用于实现Spring Security的内部功能
8. 步骤六:把自定义的SecurityConfigurer应用到安全过滤链。
9. 步骤七:改造/user接口,返回码云用户资料给前端;改造user.ftlh模板用于显示用户资料。 - 提示 - SpringMVC的方法参数; - SecurityContextHolder,默认把安全上下文SecurityContext保存在线程中,所以我们可以在当前线程应用程序中任何地方访问利用SecurityContextHolder访问安全上下文SecurityContext。
10. 步骤八:编写单元测试。模拟一个登录用户,访问收保护的接口/test,断言接口的返回内容body部分是否一致。 - 参考:[Spring Security 官方参考文档-测试](https://docs.spring.io/spring-security/site/docs/current/reference/html5/#test)
11.实验结果:
- 点击下面的gitee