权限认证SpringCloud GateWay、SpringSecurity

        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)]

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值