# JavaEE3-Experiment4
**Repository Path**: shallowcmz/JavaEE3-Experiment4
## Basic Information
- **Project Name**: JavaEE3-Experiment4
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-05-18
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
实验四
课程名称:企业级开发框架专题
学期:2020春季
|
实验名称 | 基于Spring Security码云OAuth2认证 | 实验序号 | 四 |
|
姓 名 | 陈铭昭 | 学 号 | 201741404152 | 班 级 | 17软卓1班 |
|
实验地点 | 网上 | 实验日期 | 2020/5/18 | 指导老师 | 黎志雄 |
|
教师评语 | *** | 实验成绩 | 评阅教师 |
| 百分制 | ** |
|
同组同学 | 无 |
# 实验目标
1、 掌握使用Spring Security框架;
2、 掌握配置Spring Security的安全过滤链;
3、 掌握编写Spring Security单元测试;
4、 掌握创建接入码云的应用;
5、 掌握码云OAuth2认证基本流程;
6、 掌握使用码云API;
7、 了解使用模板引擎或前端框架制作用户登录界面。
# 实验内容(及步骤):
1、创建接入码云的应用。

将上面获取到的client_id以及client_secret填入

2、编写重定向过滤器的业务逻辑。
先创建一个uri对象,然后调用response的sendRedirect方法重定向

3、使用码云access_token API向码云认证服务器发送post请求获取access_token。
先创建一个uri对象,然后利用restTemplate向gitee官方发送post请求并获取返回的json,将其解析后得到accessToken

4、使用码云API获取授权用户的资料。
先创建一个uri对象,然后利用restTemplate向gitee发送get请求并获取返回的用户信息,然后将json解析后返回

5、 把自定义的两个Filter加进安全过滤链。

6、 把我们自定义的SecurityConfigurer应用到安全过滤链。

7、 改造/user接口,返回码云用户资料给前端;改造user.ftlh模板用于显示用户资料。
先从SecurityContextHolder中拿到SecurityContext,然后再从SecurityContext中拿到验证成功后的Authentication,最后通过getPrincipal得到User对象

改写user.ftlh,使其可以显示用户的用户名:

8、 编写单元测试。模拟一个登录用户,访问受保护的接口/test,断言接口的返回内容body部分是否一致。
先通过带有beforeEach注解的init方法将mvc初始化

使用withMockUser模拟一个用户,然后向/test发送get请求,获取内容,可以看到测试通过

# 实验结果
实验结果展示:


