镇网站建设管理工作总结,做编程网站有哪些,wordpress文章末尾添加评价功能,汕头百城招聘网目录
gateway作用
gateway使用
添加依赖
配置yml文件
自定义过滤器
nacos上的gateway的配置文件 我们现在知道了通过nacos注册服务#xff0c;通过feign实现服务间接口的调用#xff0c;那对于不同权限的用户访问同一个接口#xff0c;我们怎么知道他是否具有访问的权…目录
gateway作用
gateway使用
添加依赖
配置yml文件
自定义过滤器
nacos上的gateway的配置文件 我们现在知道了通过nacos注册服务通过feign实现服务间接口的调用那对于不同权限的用户访问同一个接口我们怎么知道他是否具有访问的权限呢或者我们怎么判断是否用户已经登录了呢这些都可以通过gateway进行实现~
gateway作用 Spring Cloud Gateway是Spring Cloud生态系统中的一员它被设计用于处理所有微服务的入口流量。作为一个反向代理它不仅提供了负载均衡和路由功能还支持灵活的过滤器机制过滤器可以在请求进入网关和离开网关时执行用于处理各种逻辑如身份验证、日志记录和性能监测使得开发者能够定制和扩展其功能。
下图提供了一个关于 Spring Cloud Gateway 如何工作的高层次概述。 客户端向 Spring Cloud Gateway 发出请求。如果Gateway处理程序映射确定一个请求与路由相匹配它将被发送到Gateway Web处理程序。这个处理程序通过一个特定于该请求的过滤器链来运行该请求。过滤器被虚线分割的原因是过滤器可以在代理请求发送之前和之后运行逻辑。所有的 pre 前过滤器逻辑都被执行。然后发出代理请求。在代理请求发出后post 后过滤器逻辑被运行。
gateway使用
添加依赖 !--nacos服务注册发现依赖--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--网关gateway依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactIdversion3.1.4/version/dependency
配置yml文件
gateway的配置文件其实就是将所有接口配置到web服务中然后通过具体的过滤原则来访问每个接口 其中- Authorizafalse表示是否需要通过token验证这个为我们自定义的一个过滤原则名称的前缀- StripPrefix1为在发送请求时是否需要去掉第一层路径比如/api/user/**如果StripPrefix1表示api需要去掉实际访问的是/user/**接口。
自定义过滤器 AuthorizaGatewayFilterFactory使我们自定义的一个过滤器gateway的自定义过滤器名字是有一定要求的即 “你想取的过滤器名字前缀GatewayFilterFactory”这里以我的为例然后把前缀作为刚刚配置文件的配置进行配置 然后我们实现这个自定义的过滤器
package com.yinan.authorize;import com.alibaba.fastjson.JSONArray;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;import java.util.Arrays;
import java.util.List;Component
Slf4j
Data
ConfigurationProperties(prefix exclude)
public class AuthorizaGatewayFilterFactory extends AbstractGatewayFilterFactoryAuthorizaGatewayFilterFactory.Config {/*** 需要放行的授权接口(nacos中的配置文件)*/private String[] path;Autowiredprivate RedisTemplateString, String redisTemplate;/*** 授权token*/private static final String AUTHORIZE_TOKEN Authorization;/****/private static final String AUTHORIZE_IP x-access-ip;/*** 用来标记是否需要授权校验*/private static final String AUTHORIZE_RESOURCE x-access-resource;public AuthorizaGatewayFilterFactory() {super(Config.class);log.info(Loaded GatewayFilterFactory [Authorize]);}Overridepublic ListString shortcutFieldOrder() {return Arrays.asList(enabled);}Overridepublic GatewayFilter apply(Config config) {log.info(你已经进入gateway的过滤器中了----------);return (exchange, chain) - {if (!config.enabled) {return chain.filter(exchange);}ServerHttpRequest request exchange.getRequest();ServerHttpResponse response exchange.getResponse();HttpHeaders headers request.getHeaders();ServerWebExchange build null;// 从header中获取token信息String token headers.getFirst(AUTHORIZE_TOKEN);// 获取用户IPString ip headers.getFirst(AUTHORIZE_IP);log.info(当前访问url request.getURI());if (token null) {response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}log.info(请求的token为 token);log.info(请求的ip为 ip);if (!.equals(token)) {try {ValueOperationsString, String value redisTemplate.opsForValue();String userid value.get(ip _user_ _userid_ token);System.out.println(userid: userid);String username value.get(ip _user_ _username_ token);String authvalue.get(ip_token_userid);if(authnull){response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}
// 设置请求头ServerHttpRequest host exchange.getRequest().mutate().headers(httpHeaders - {httpHeaders.add(USER-ID, userid);httpHeaders.add(USER-NAME, username);}).build();build exchange.mutate().request(host).build();
// 判断是否需要接口授权校验if (StringUtils.isNotBlank(headers.getFirst(AUTHORIZE_RESOURCE))) {Boolean authority getAuthority(request.getURI().toString(), userid);if (authority) {response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}}
// 黑名单校验
// if (checkBlackList(ip, username)) {
// response.setStatusCode(HttpStatus.FORBIDDEN);
// return response.setComplete();
// }} catch (Exception e) {e.printStackTrace();
// token无效log.error(出现异常【{}】, e.getMessage());//设置状态码response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}}
//认证通过将用户ID进行传递到下游服务器return chain.filter(build);};}/*** 校验黑名单* param ip* param username* return*/
// private boolean checkBlackList(String ip, String username) {
//
// }/*** 获取用户权限(接口权限校验)* param url* param userid* return*/private Boolean getAuthority(String url, String userid) {//放行接口不需要做授权校验直接放行for (String path:path) {if(url.indexOf(path)!-1){return false;}}//获取用户权限String resourceredisTemplate.opsForValue().get(userPermission:userid);ListString list JSONArray.parseArray(resource,String.class);for (String res:list) {if(url.indexOf(res)!-1){return false;}}return true;}DataAllArgsConstructorNoArgsConstructorpublic static class Config {/*** 控制是否开启认证*/private boolean enabled;}}如果你看了我之前讲的nacos配置的内容那你应该就能理解以下截图中的意思没有了解过nacos的话建议先去看看以下文章微服务----nacos配置及简单使用 nacos上的gateway的配置文件 management:# 端点检查健康检查endpoints:web:exposure:include: *
spring:profiles:active: devcloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:# 处理跨域globalcors:corsConfigurations:[/**]:allowedHeaders: *allowedOrigins: *allowedMethods: *discovery:locator:# false为服务器名不自动匹配true则相反enabled: false# 服务名以小写进行匹配lowerCaseServiceId: trueroutes:# web服务- id: service-1uri: lb://data-serverpredicates:- Path/scriptsContent/**filters:#开启token验证- Authorizatrue- StripPrefix0- id: service-2uri: lb://user-servicepredicates:- Path/api/user/**filters:- Authorizafalse- StripPrefix0#需要放行的授权接口
exclude:path:- /system/dictionary/by- /system/resource/by- /system/role/by- /system/api/user/by- /system/black/by- /oss- /web/article/by- /web/code/bypattern:dateformat: yyyy/MM/dd hh:mm:ss
以上就是我的具体的过滤器实现逻辑但是需要根据你实际的项目代码逻辑对这个过滤器进行修改 。 实现后当前端调用你的接口时会经过gateway网关中的过滤器看看你是否有这个权限进行访问或者是否需需要经过登录后才能访问如果以上都没问题就会放行到下游过滤器继续进行检查如果都没有问题最后就会调用到你的接口~ 以上几篇博文我们大致讲了一下微服务的搭建和使用本人也是最近刚学会微服务对于简单的微服务搭建你可以根据我的这几篇博文进行学习如果版本这些没什么问题是肯定能实现的至于这些技术较深的理解和学习如果你有兴趣可以继续进行专研学习我们共同进步~ 文章转载自: http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.hlwzd.cn.gov.cn.hlwzd.cn http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn http://www.morning.lffrh.cn.gov.cn.lffrh.cn http://www.morning.qkrz.cn.gov.cn.qkrz.cn http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.litao7.cn.gov.cn.litao7.cn http://www.morning.klyyd.cn.gov.cn.klyyd.cn http://www.morning.ztqj.cn.gov.cn.ztqj.cn http://www.morning.jmllh.cn.gov.cn.jmllh.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.rgwrl.cn.gov.cn.rgwrl.cn http://www.morning.gtwtk.cn.gov.cn.gtwtk.cn http://www.morning.dmfdl.cn.gov.cn.dmfdl.cn http://www.morning.qsdnt.cn.gov.cn.qsdnt.cn http://www.morning.bojkosvit.com.gov.cn.bojkosvit.com http://www.morning.plwfx.cn.gov.cn.plwfx.cn http://www.morning.cxlys.cn.gov.cn.cxlys.cn http://www.morning.hkpn.cn.gov.cn.hkpn.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.symgk.cn.gov.cn.symgk.cn http://www.morning.fktlr.cn.gov.cn.fktlr.cn http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.jkszt.cn.gov.cn.jkszt.cn http://www.morning.ljwyc.cn.gov.cn.ljwyc.cn http://www.morning.zqfjn.cn.gov.cn.zqfjn.cn http://www.morning.jfwbr.cn.gov.cn.jfwbr.cn http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn http://www.morning.mtzyr.cn.gov.cn.mtzyr.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn http://www.morning.kttbx.cn.gov.cn.kttbx.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.ftnhr.cn.gov.cn.ftnhr.cn http://www.morning.ntqjh.cn.gov.cn.ntqjh.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.yskhj.cn.gov.cn.yskhj.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.zdmrf.cn.gov.cn.zdmrf.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.ygflz.cn.gov.cn.ygflz.cn http://www.morning.rjnx.cn.gov.cn.rjnx.cn http://www.morning.mjwnc.cn.gov.cn.mjwnc.cn http://www.morning.ddjp.cn.gov.cn.ddjp.cn http://www.morning.ptwrz.cn.gov.cn.ptwrz.cn http://www.morning.xgzwj.cn.gov.cn.xgzwj.cn http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn http://www.morning.pxmyw.cn.gov.cn.pxmyw.cn http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn http://www.morning.kysport1102.cn.gov.cn.kysport1102.cn http://www.morning.ryysc.cn.gov.cn.ryysc.cn http://www.morning.kwpnx.cn.gov.cn.kwpnx.cn http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn http://www.morning.hjwxm.cn.gov.cn.hjwxm.cn http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn http://www.morning.zckhn.cn.gov.cn.zckhn.cn http://www.morning.nrqtk.cn.gov.cn.nrqtk.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.mlffg.cn.gov.cn.mlffg.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.bwttp.cn.gov.cn.bwttp.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn http://www.morning.trhrk.cn.gov.cn.trhrk.cn http://www.morning.cwgfq.cn.gov.cn.cwgfq.cn http://www.morning.pbknh.cn.gov.cn.pbknh.cn http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.mksny.cn.gov.cn.mksny.cn