介绍
:::tips 授权规则可以对请求方来源做判断和控制,有白名单和黑名单两种方式
- 白名单:来源(origin)在白名单内的调用者允许访问
 - 黑名单:来源(origin)在黑名单内的调用者不允许访问
 
点击左侧菜单的授权,可以看到授权规则
- 资源名:就是受保护的资源
 - 流控应用:就是来源者的名单
- 如果是勾选白名单,则名单中的来源被许可访问,其他来源禁止访问
 - 如果是勾选黑名单,则名单中的来源被禁止访问,其他来源允许访问
 
 

如果需要允许请求从gateway到服务,不允许浏览器访问服务,那么白名单中就要填写网关的来源名称(origin) :::
获取请求来源(origin)
:::tips Sentinel是通过RequestOriginParser这个接口的parseOrigin方法来获取请求来源的,这个方法的作用就是从请求对象中获取请求者的origin值并返回。默认情况下,Sentinel不管请求者从哪里来,返回值永远是default,也就是说一切请求的来源都被认为是一样的值(default),因此需要自定义这个接口的实现类,让不同的请求返回不同的origin :::
//实现RequestOriginParser接口,让不同的请求返回不同的origin@Componentpublic class HeaderOriginParser implements RequestOriginParser {@Overridepublic String parseOrigin(HttpServletRequest httpServletRequest) {//从请求头中获取orignString origin = httpServletRequest.getHeader("origin");//非空判断if(StringUtils.isEmpty(origin)){origin = "blank";}return origin;}}
添加请求头
:::tips 既然是从请求头中获取origin值,就必须让所有从gateway路由到微服务的请求都带上origin请求头,可以通过GatewayFilter来实现统一添加请求头
修改gateway网关工程的配置文件,添加一个defaultFilter(全局过滤器),然后使用AddRequestHeader添加一个orign=gateway请求头,表示从gateway网关服务路由的所有请求都会带上origin请求头,值为gateway,而从其它地方到达微服务的请求则没有这个请求头
:::
server:#配置服务端口port: 端口号spring:application:#配置服务名称name: gatewaycloud:nacos:#配置Nacos地址server-addr: localhost:8848#Gateway网关配置gateway:#全局过滤器配置,针对所有微服务default-filters:#添加orign=gateway请求头- AddRequestHeader=origin,gateway
配置授权规则
:::tips 接下来点击资源右边的授权按钮添加一个授权规则,设置流控应用为gateway,接下来通过浏览器访问这个资源就会返回异常 :::
