log.error("加载/security-whitelist.properties出错:{}",e.getMessage());
e.printStackTrace();
}
}
@Autowired
private TokenStore tokenStore;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String requestUrl = exchange.getRequest().getPath().value();
AntPathMatcher pathMatcher = new AntPathMatcher();
//白名单放行
for (String url : whitelist) {
if (pathMatcher.match(url, requestUrl)) {
return chain.filter(exchange);
}
}
//检查token是否存在
String token = getToken(exchange);
if (StringUtils.isBlank(token)) {
return buildReturnMono("没有认证",exchange);
}
//判断是否是有效的token
OAuth2AccessToken oAuth2AccessToken;
try {
oAuth2AccessToken = tokenStore.readAccessToken(token);
boolean expired = oAuth2AccessToken.isExpired();
if (expired) {
return buildReturnMono("认证令牌已过期",exchange);
}
return chain.filter(exchange);
} catch (InvalidTokenException e) {
log.info("认证令牌无效: {}", token);
return buildReturnMono("认证令牌无效",exchange);
}
}
##### 3.还有其他网关吗?
网关常用的还有Zuul、基于Nginx的OpenResty
##### 4.和过滤器相比的区别:
* 过滤器:对单个服务器的请求进行拦截控制
* 网关:对所有的服务器的请求进行拦截控制
##### 5.zuul和spring cloud gateway的对比
* zuul:是Netflix的,是基于servlet实现的,阻塞式的api,不支持长连接。
* gateway:是springcloud自己研制的微服务网关,是基于Spring5构建,能够实现响应式非阻塞式的Api,支持长连接
##### 6.网关和nginx的区别
* 相同点:都是可以实现对api接口的拦截,负载均衡、反向代理、请求过滤等,可以实现和网关一样的效果。
+ 不同点:
- Nginx采用C语言编写,Gateway属于Java语言编写的, 能够更好让我们使用java语言来实现对请求的处理。
- Nginx 属于服务器端负载均衡器。
- Gateway 属于本地负载均衡器。原文链接:https://blog.csdn.net/bufegar0/article/details/117355172##### 7.主要组成部分
+ **Route(路由)**: 网关的基本构件。它由一个ID、一个目的地URI、一个谓词(Predicate)集合和一个过滤器(Filter)集合定义。如果集合谓词为真,则路由被匹配。
+ **Predicate(谓词)**: 这是一个 [Java 8 Function Predicate]( )。输入类型是 [Spring Framework `ServerWebExchange`]( )。这让你可以在HTTP请求中的任何内容上进行匹配,比如header或查询参数。
+ **Filter(过滤器)**: 这些是 [`GatewayFilter`]( ) 的实例,已经用特定工厂构建。在这里,你可以在发送下游请求之前或之后修改请求和响应。
### 二、SpringSecurity
Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括**身份验证**、**授权**、**防止攻击等功能**。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。
![image-20240331100652563](https://img-blog.csdnimg.cn/img_convert/a46a421278214b01d740d8dedc3d0800.png)
##### 1.认证
* SecurityContextHolder
Spring Security 的认证模型的核心是 `SecurityContextHolder`。它包含了[SecurityContext]( )。
![image-20240331095107020](https://img-blog.csdnimg.cn/img_convert/3986380dbfbfd165c5fc5b08ce1a75c5.png)
SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication = new TestingAuthenticationToken(“username”, “password”, “ROLE_USER”);
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context);
* AbstractAuthenticationProcessingFilter
![image-20240331095508460](https://img-blog.csdnimg.cn/img_convert/d970ffb0986d7787f58a96a054005f9d.png)
##### 2.授权
[`Authentication`]( ) 讨论了所有 `Authentication` 实现如何存储 `GrantedAuthority` 对象的列表。这些对象代表已经授予委托人(principal)的权限。`GrantedAuthority` 对象由 `AuthenticationManager` 插入到 `Authentication` 对象中,随后由 `AccessDecisionManager` 实例在做出授权决定时读取。
`GrantedAuthority` 接口只有一个方法。
String getAuthority();
##### 3.防止攻击
主要提供了对CSRF、HTTP Header、HTTP的保护
### 三、OAuth2.0
##### 1.OAuth2设计的角色
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/09e9742a8586f13b5f75e9878e1ff44d.png)
![img](https://img-blog.csdnimg.cn/img_convert/5eeb0485b7a6aeb5a210d84cf32dd7ca.png)
![img](https://img-blog.csdnimg.cn/img_convert/bd01cde9c6e1388ef4c577c3a0d18e4b.png)
![img](https://img-blog.csdnimg.cn/img_convert/916fd0e678bb4bedd750dbe55d175f6d.png)
![img](https://img-blog.csdnimg.cn/img_convert/e0db0f9c13a5a49afd384cb1c7d1c3e0.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
![img](https://img-blog.csdnimg.cn/img_convert/9d78175b3c80ef13f90735f1afcb0346.jpeg)
*由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
[外链图片转存中...(img-8KvtkZgC-1712634343368)]