Webflux, How to intercept a request and add a new header

Melad Basilius :

Using Webflux filter, I am trying to intercept the requests and check if the request is coming from certain URI then add a new Authorization header

The filter code is simple and straightforward

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class AuthorizationFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

        return chain.filter(Optional.of(exchange)
                .filter(serverWebExchange -> serverWebExchange.getRequest().getURI().getPath().endsWith("/callback"))
                .map(serverWebExchange -> addNewHeader(serverWebExchange))
                .orElse(exchange));
    }

    private ServerWebExchange addNewHeader(ServerWebExchange serverWebExchange) {

        String authHeader=serverWebExchange.getRequest().getQueryParams().get("state").get(0);

        if (authHeader == null) {
            throw new BadRequestException("State not complete (access_token missing) for //callback");
        }

        try {
            serverWebExchange.getRequest().getHeaders().setBearerAuth(authHeader);
        }catch (Throwable t){
            t.printStackTrace();
        }

        return serverWebExchange;
    }
}

But it throws an exception

java.lang.UnsupportedOperationException
    at org.springframework.http.ReadOnlyHttpHeaders.set(ReadOnlyHttpHeaders.java:99)
    at org.springframework.http.HttpHeaders.setBearerAuth(HttpHeaders.java:774)

It seems the header map is read only.How can i overcome this issue and add the new Header ?

gmeiner.m :

You can mutate the ServerWebExchange and its ServerHttpRequest with their mutate() methods which returns a 'Builder' for each of them.

Example Java:

@Component
public class AuthorizationFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest mutatedRequest = exchange.getRequest().mutate().header(HttpHeaders.AUTHORIZATION, "Bearer " + authHeader).build();
        ServerWebExchange mutatedExchange = exchange.mutate().request(mutatedRequest).build();
        return chain.filter(mutatedExchange);
    }
}

Example Kotlin:

@Component
class AuthorizationFilter : WebFilter {
    override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
        val mutatedRequest = exchange.request.mutate().header(HttpHeaders.AUTHORIZATION, "Bearer $authHeader").build()
        val mutatedExchange = exchange.mutate().request(mutatedRequest).build()
        return chain.filter(mutatedExchange)
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

How to intercept web url from chrome and add headers to the request?

分類Dev

Simple Odata Client - How to add oAuth Token in each request header?

分類Dev

How to add new header to jersey client to upload multipart file

分類Dev

flutter: FadeInImage.assetNetwork: how to add request header like access token

分類Dev

How to add authentication token as header in subsequent request in ember-simple-auth?

分類Dev

Add header to every request in Postman in pre-request script

分類Dev

How to get the context of the current request in spring-webflux

分類Dev

How to intercept class creation and add attribute using a metaclass?

分類Dev

How to construct python post request with header and body

分類Dev

How to send GET Request with JSON in Header in Retrofit

分類Dev

How to set header in httppost/ httpget request

分類Dev

How to set header in puppeteer just main page request not all request

分類Dev

How to add header to row for each record

分類Dev

How to add tooltip to datatable header in vuetify?

分類Dev

How to add a header and/or footer to a sed or awk stream?

分類Dev

Spring webflux error handler: How to get the reactor context of the request in the error handler?

分類Dev

How to add new line in a file

分類Dev

how to add an new object with lists in it

分類Dev

How to cancel previous Task if new request recieved?

分類Dev

Intercept Axios request with global JS methods

分類Dev

How to add error response format in Swagger for a Spring-boot project based on webflux

分類Dev

How do I read any request header in PHP

分類Dev

How do I read any request header in PHP

分類Dev

How do I read any request header in PHP

分類Dev

How to setup Request.Header in FakeHttpContext for Unit Testing

分類Dev

How to cache true or false value from request header in Rails?

分類Dev

How to add an attribute to request like the 'user' variable

分類Dev

How to add attributes to a request in a scrapy contract

分類Dev

Angular: intercept ajax request, check internet connection and not send request

Related 関連記事

  1. 1

    How to intercept web url from chrome and add headers to the request?

  2. 2

    Simple Odata Client - How to add oAuth Token in each request header?

  3. 3

    How to add new header to jersey client to upload multipart file

  4. 4

    flutter: FadeInImage.assetNetwork: how to add request header like access token

  5. 5

    How to add authentication token as header in subsequent request in ember-simple-auth?

  6. 6

    Add header to every request in Postman in pre-request script

  7. 7

    How to get the context of the current request in spring-webflux

  8. 8

    How to intercept class creation and add attribute using a metaclass?

  9. 9

    How to construct python post request with header and body

  10. 10

    How to send GET Request with JSON in Header in Retrofit

  11. 11

    How to set header in httppost/ httpget request

  12. 12

    How to set header in puppeteer just main page request not all request

  13. 13

    How to add header to row for each record

  14. 14

    How to add tooltip to datatable header in vuetify?

  15. 15

    How to add a header and/or footer to a sed or awk stream?

  16. 16

    Spring webflux error handler: How to get the reactor context of the request in the error handler?

  17. 17

    How to add new line in a file

  18. 18

    how to add an new object with lists in it

  19. 19

    How to cancel previous Task if new request recieved?

  20. 20

    Intercept Axios request with global JS methods

  21. 21

    How to add error response format in Swagger for a Spring-boot project based on webflux

  22. 22

    How do I read any request header in PHP

  23. 23

    How do I read any request header in PHP

  24. 24

    How do I read any request header in PHP

  25. 25

    How to setup Request.Header in FakeHttpContext for Unit Testing

  26. 26

    How to cache true or false value from request header in Rails?

  27. 27

    How to add an attribute to request like the 'user' variable

  28. 28

    How to add attributes to a request in a scrapy contract

  29. 29

    Angular: intercept ajax request, check internet connection and not send request

ホットタグ

アーカイブ