「SpringBoot WEB 系列产品」WebClient 之 Basic Auth 受权

摘要:【SpringBoot WEB 系列产品】WebClient 之 Basic Auth 受权...

【SpringBoot WEB 系列产品】WebClient 之 Basic Auth 受权

有关 BasicAuth 是啥,及其怎样完成鉴权的专业知识点能够在以前的博闻 【SpringBoot WEB 系列产品】RestTemplate 之 Basic Auth 受权中早已详细介绍已过,因而这篇将立即进到文章正文,详细介绍一下怎样在 WebClient 中开展 Basic Auth 受权

I. 新项目自然环境

本新项目依靠SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA开展开发设计

1. 依靠

应用 WebClient,最关键的引进依靠以下(省去没了 SpringBoot 的有关依靠,如针对怎样建立 SpringBoot 新项目不太清晰的小伙子伴,能够关心一下我以前的博闻)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2. REST 插口

根据 WebFlux 出示一个 http 插口,依据恳求头分析 Basic Auth 是不是合理合法,一个最初的简易完成方法以下

@GetMapping(path = "auth")public Mono<String> auth(ServerHttpRequest request, ServerHttpResponse response)throws IOException { List<String> authList = request.getHeaders().get("Authorization");if (CollectionUtils.isEmpty(authList)) { response.setStatusCode(HttpStatus.NON_AUTHORITATIVE_INFORMATION);return Mono.just("no auth info!"); } String auth = authList.get(0); String[] userAndPass = new String(new BASE64Decoder().decodeBuffer(auth.split(" ")[1])).split(":");if (userAndPass.length < 2) { response.setStatusCode(HttpStatus.NON_AUTHORITATIVE_INFORMATION);return Mono.just("illegal auth info!"); }if (!("user".equalsIgnoreCase(userAndPass[0]) && "pwd".equalsIgnoreCase(userAndPass[1]))) { response.setStatusCode(HttpStatus.NON_AUTHORITATIVE_INFORMATION);return Mono.just("error auth info!"); }return Mono.just("auth success: " + JSONObject.toJSONString(request.getQueryParams()));}当鉴权取得成功以后,一切正常回到;当鉴权不成功以后,回到 403 情况码,并回到相匹配的提醒信息内容

II. Basic Auth 鉴权

了解 Basic Auth 完成基本原理的小伙子伴,能够非常简单的完成,例如立即设定恳求头

1. 设定恳求头

立即在 WebClient 建立的情况下,特定默认设置的恳求头就可以

// 最初的恳求头设定方法WebClient webClient = WebClient.builder() .defaultHeader("Authorization", "Basic " + Base64Utils.encodeToString("user:pwd".getBytes())) .baseUrl("http://127.0.0.1:8080").build();Mono<ResponseEntity<String>> response = webClient.get().uri("/auth?name=一灰灰&age=18").exchange().flatMap(s -> s.toEntity(String.class));2. filter 方法

在上一篇详细介绍 WebClient 恳求头的应用姿态中,除开默认设置恳求头设定以外,也有一个 filter 的方法,而 WebClient 恰好出示了一个专业用以 Basic Auth 的 Filter

// filter方法webClient = WebClient.builder().filter(ExchangeFilterFunctions.basicAuthentication("user", "pwd")) .baseUrl("http://127.0.0.1:8080").build();response = webClient.get().uri("/auth?name=一灰灰&age=18").exchange().flatMap(s -> s.toEntity(String.class));response.subscribe(s -> System.out.println("auth return: " + s));3. 检测与总结

之上编码能够在后文的工程项目源代码中获得,检测輸出以下

header auth return: <200 OK OK,auth success: {"name":["一灰灰"],"age":["18"]},[Content-Type:"text/plain;charset=UTF-8", Content-Length:"49"]>filter auth return: <200 OK OK,auth success: {"name":["一灰灰"],"age":["18"]},[Content-Type:"text/plain;charset=UTF-8", Content-Length:"49"]>文中关键详细介绍了二种 WebClient 的 Basic Auth 应用姿态,其基本原理全是根据设定恳求头的方法来完成的

根据WebClient.builder().defaultHeader来手动式设定默认设置恳求头根据WebClient.builder().filter与ExchangeFilterFunctions.basicAuthentication,根据 filter 来解决恳求头II. 别的

0. 新项目

系列产品博闻

【SpringBoot WEB 系列产品】WebClient 之基本应用姿态【SpringBoot WEB 系列产品】WebClient 之文档提交【SpringBoot WEB 系列产品】WebClient 之恳求头设定源代码

工程项目:https://github.com/liuyueyi/spring-boot-demo源代码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/222-web-client1. 一灰灰 Blog

尽信书则比不上,之上內容,实属一家之言,因本人工作能力比较有限,免不了有疏忽和不正确的地方,如发觉 bug 或是有更强的提议,热烈欢迎指责纠正,不吝感谢

下边一灰灰的本人blog,纪录全部学习培训和工作中中的博闻,热烈欢迎大伙儿前往逛一逛

一灰灰 Blog 本人blog https://blog.hhui.top一灰灰 Blog-Spring 专题讲座blog http://spring.hhui.top

一灰灰blog

RestTemplate系列产品博闻强烈推荐

【SpringBootWEB系列产品】AsyncRestTemplate之多线程非堵塞互联网恳求详细介绍篇【SpringBootWEB系列产品】RestTemplate之文档提交【SpringBootWEB系列产品】RestTemplate之非200情况码信息内容捕捉【SpringBootWEB系列产品】RestTemplate之BasicAuth受权【SpringBootWEB系列产品】RestTemplate之代理商浏览【SpringBootWEB系列产品】RestTemplate之请求超时设定【SpringBootWEB系列产品】RestTemplate当中文错码难题fix【SpringBootWEB系列产品】RestTemplate之自定恳求头【SpringBootWEB系列产品】RestTemplate基本使用方法总结【SpringBootWEB系列产品】RestTemplate4xx/5xx出现异常信息内容捕捉【SpringBootWEB系列产品】RestTempalteurlencode主要参数分析出现异常全线剖析



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:轻松抠图