亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Webflux的WebClient的用戶名和密碼放在哪里?

Spring Webflux的WebClient的用戶名和密碼放在哪里?

慕村225694 2023-03-09 17:18:51
我嘗試使用路由器和處理程序類制作 Spring WebFlux 安全應用程序。首先,下面的代碼是WebFlux安全的配置代碼。@Configuration@EnableWebFluxSecuritypublic class BlogWebFluxSecurityConfig {        @Bean    public MapReactiveUserDetailsService userDetailsService() {                UserDetails userWebFlux = User.withUsername("joseph").password("password").roles("USER").build();        return new MapReactiveUserDetailsService(userWebFlux);    }        @Bean    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {        http        .authorizeExchange()        .pathMatchers("/route/user/all", "/route/post/all").permitAll()        .pathMatchers(HttpMethod.GET, "/route/user/**", "/route/post/**").hasRole("USER")        .anyExchange().authenticated()        .and()        .httpBasic();                return http.build();    } }接下來的代碼是關于路由器類的。@Configuration@EnableWebFluxpublic class BlogWebFluxEndpointRouter {    @Bean    public RouterFunction<ServerResponse> routesUser(UserHandler handler) {                return RouterFunctions.route(RequestPredicates.GET("/route/user/all"), handler::findAll)                    .andRoute(RequestPredicates.GET("/route/user/id/{id}"), handler::findById)                    .andRoute(RequestPredicates.GET("/route/user/username/{username}"), handler::findByUsername)                    .andRoute(RequestPredicates.GET("/route/user/email/{email}"), handler::findByEmail)                    .andRoute(RequestPredicates.POST("/route/user/create"), handler::register)                    .andRoute(RequestPredicates.GET("/route/user/login/{username}/{password}"), handler::authenticate);    }    因為我做了WebFlux安全配置,肯定有一些WebClient不能執行和禁止的,如下圖,Login : UnauthorizedUser Creation: Forbidden我不使用 cURL。所以我想知道的是我的WebClient方法是什么,必須在其中找到用戶名和密碼并將其轉移到WebClient課堂上。任何答復將不勝感激。
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

從 spring 5.1 開始,您應該使用 設置基本身份驗證HttpHeaders#setBasicAuth,如下所示:

webClient
    .get()
    .uri("https://example.com")
    .headers(headers -> headers.setBasicAuth("username", "password"))
    .exchange()
    ....

以前使用 的方法.filter(basicAuthentication("user", "password")現在已棄用。


查看完整回答
反對 回復 2023-03-09
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

HTTP 基本身份驗證需要在Authorization標頭中以 Base64 格式編碼的用戶名和密碼。此外,您不需要登錄端點,因為此信息應隨每個請求一起發送。

將 Basic Auth 標頭添加到客戶端中的每個調用,如下所示:

String basicAuthHeader = "basic " + Base64Utils.encodeToString((username + ":" + password).getBytes())

client.get().uri("/route/user/all")
      .accept(MediaType.APPLICATION_JSON)
      .header(HttpHeaders.AUTHORIZATION, basicAuthHeader)
      .exchange()
      .flatMapMany(response -> response.bodyToFlux(User.class))
      .subscribe(u -> System.out.println("All Users : " + u.getUsername() + ":" + u.getEmail() + ":" + u.getFullname()));



查看完整回答
反對 回復 2023-03-09
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

Spring 提供了 API,用于通過ClientFilters向 WebClient 提供基本的身份驗證參數。


Authorization您可以使用較少的自定義編碼設置標頭來獲得相同的結果。


請從 spring 文檔中查看下面的代碼片段:


import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;


    WebClient client = WebClient.builder()

            .filter(basicAuthentication("user", "password"))

            .build();


查看完整回答
反對 回復 2023-03-09
  • 3 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號