当前位置: 首页 > 后端技术 > Java

对SpringGateway中的SpringActuator路径进行权限验证

时间:2023-04-01 18:08:25 Java

后台需要拦截spingActuator的监听路径,从而实现弹窗输入登录信息的功能,但是gateway提供的GlobalFilter拦截器没有生效,所以有些方案是使用WebFilter拦截。拦截器代码如下:importorg.springframework.core.annotation.Order;导入org.springframework.http.HttpHeaders;导入org.springframework.http.HttpStatus;导入org.springframework.http.server.reactive.ServerHttpRequest;导入org.springframework.http.server.reactive。ServerHttpResponse;导入org.springframework.stereotype.Component;导入org.springframework.web.server.ServerWebExchange;导入org.springframework.web.server.WebFilter;导入org.springframework.web.server.WebFilterChain;导入reactor.core.publisher.Mono;importsun.misc.BASE64Decoder;importjava.io.IOException;importjava.util.Objects;@Order(2)@ComponentpublicclassActuatorFilterimplementsWebFilter{@OverridepublicMonofilter(ServerWebExchangeexchange,WebFilterChain链){ServerHttpRequest请求=exchange.getRequest();ServerHttpResponse响应e=exchange.getResponse();StringuriPath=request.getURI().getPath();if(uriPath.startsWith("/actuator/")){Stringauth=request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);if(Objects.isNull(auth)){System.out.println("校试请申请头为空,需要进行登录..");response.getHeaders().add(HttpHeaders.WWW_AUTHENTICATE,"基本领域=""");response.setStatusCode(HttpStatus.UNAUTHORIZED);返回响应.setComplete();}else{System.out.println("auth:"+auth);BASE64Decoder解码器=newBASE64Decoder();字符串[]值=新字符串[0];try{values=newString(decoder.decodeBuffer(auth.split("")[1])).split(":");}catch(IOExceptione){thrownewRuntimeException(e);}if(values.length==2){Stringusername=values[0];字符串密码=值[1];System.out.println("用户名:"+用户名);System.out.println("密码:"+pwd);if(Objects.equals("test",username)&&Objects.equals("test",pwd)){returnchain.filter(exchange);}else{response.getHeaders().add(HttpHeaders.WWW_AUTHENTICATE,"基本领域=""");response.setStatusCode(HttpStatus.UNAUTHORIZED);返回响应.setComplete();}}}}返回chain.filter(exchange);}}