背景
须要对spingActuator的监测门路进行拦挡,从而实现弹窗输出登录信息的性能,然而gateway提供的GlobalFilter
拦截器不失效,故钻研了一番
解决形式
应用WebFilter
进行拦挡,拦截器代码如下:
import org.springframework.core.annotation.Order;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 org.springframework.web.server.WebFilter;import org.springframework.web.server.WebFilterChain;import reactor.core.publisher.Mono;import sun.misc.BASE64Decoder;import java.io.IOException;import java.util.Objects;@Order(2)@Componentpublic class ActuatorFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); String uriPath = request.getURI().getPath(); if(uriPath.startsWith("/actuator/")) { String auth = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION); if(Objects.isNull(auth)){ System.out.println("校验申请头为空,需进行登录.."); response.getHeaders().add(HttpHeaders.WWW_AUTHENTICATE,"Basic realm=".""); response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); }else { System.out.println("auth:" + auth); BASE64Decoder decoder = new BASE64Decoder(); String[] values = new String[0]; try { values = new String(decoder.decodeBuffer(auth.split(" ")[1])).split(":"); } catch (IOException e) { throw new RuntimeException(e); } if (values.length == 2) { String username = values[0]; String pwd = values[1]; System.out.println("username:" + username); System.out.println("pwd:" + pwd); if(Objects.equals("test",username) && Objects.equals("test",pwd)){ return chain.filter(exchange); }else { response.getHeaders().add(HttpHeaders.WWW_AUTHENTICATE,"Basic realm=".""); response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); } } } } return chain.filter(exchange); }}