gateway请求拦截_单点登录 - 关于CAS客户端的拦截请求和忽略/排除不需要拦截的请求URL的问题...

在《单点登录 - 自定义CAS客户端的过滤器AuthenticationFilter》https://my.oschina.net/thinwonton/blog/1439112 文章里,介绍了一种CAS客户端的拦截请求和忽略/排除不需要拦截的请求URL的方法,该方法需要改写原来的AuthenticationFilter类。

后来无意中在网上看到了另一种方法,这好像是cas  clieng 3.3以后支持的方法,我们一起看一下AuthenticationFilter 源码。

CAS CLIENT 3.2.1的源码

public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {

final HttpServletRequest request = (HttpServletRequest) servletRequest;

final HttpServletResponse response = (HttpServletResponse) servletResponse;

final HttpSession session = request.getSession(false);

final Assertion assertion = session != null ? (Assertion) session.getAttribute(CONST_CAS_ASSERTION) : null;

if (assertion != null) {

filterChain.doFilter(request, response);

return;

}

final String serviceUrl = constructServiceUrl(request, response);

final String ticket = CommonUtils.safeGetParameter(request,getArtifactParameterName());

final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);

if (CommonUtils.isNotBlank(ticket) || wasGatewayed) {

filterChain.doFilter(request, response);

return;

}

final String modifiedServiceUrl;

log.debug("no ticket and no assertion found");

if (this.gateway) {

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过实现GatewayFilter接口来拦截post请求,并在请求中添加参数。 以下是一个示例代码,你可以在其中编写自己的逻辑: ```java @Component public class CustomGatewayFilter implements GatewayFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); ServerHttpRequest.Builder builder = request.mutate(); if (request.getMethod() == HttpMethod.POST) { // 添加参数 MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>(); queryParams.add("param1", "value1"); queryParams.add("param2", "value2"); // 替换请求体 Flux<DataBuffer> body = exchange.getRequest().getBody(); String bodyStr = DataBufferUtils.join(body).block().toString(StandardCharsets.UTF_8); bodyStr += "&" + URLEncodedUtils.format(queryParams, StandardCharsets.UTF_8); byte[] bytes = bodyStr.getBytes(StandardCharsets.UTF_8); DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes); builder = builder.method(request.getMethod()) .headers(httpHeaders -> { httpHeaders.addAll(request.getHeaders()); }) .body(Mono.just(buffer)); // 设置Content-Type exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_FORM_URLENCODED); } ServerHttpRequest newRequest = builder.build(); return chain.filter(exchange.mutate().request(newRequest).build()); } } ``` 此过滤器将会在请求为POST方法时,添加两个参数param1和param2,并将参数拼接到请求体中。最后将请求体重新封装,并设置Content-Type为application/x-www-form-urlencoded。你可以根据自己的需要,修改这个过滤器的代码逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值