首页 > 编程语言 > 详细

Spring cloud微服务安全实战-3-5 API安全机制之认证(2)

时间:2019-11-21 10:54:51      阅读:119      评论:0      收藏:0      [点我收藏+]

基于Http协议的认证方式有很多。本节我们只讲一个最简单的HttpBasic认证。聪明就可以看出来,这是一个最基础的认证,好处是简单方便,所有的主流浏览器都支持,问题就是并不是非常安全的,但是帮我们大家理解认证这个概念是足够的。
技术分享图片
首先要对认证信息做Base64的加密,加密之前要把这两个信息组合起来。用户名冒号密码组合成这样一个字符串。然后拿这个字符串做Base64的字符串的加密。并生成一个字符串。
技术分享图片
把生成的串放到http请求的 请求头里面。带个前缀 Basic +空格 + 加密后的字符串。
技术分享图片

开始写代码


先加上字符串处理的工具的引用。commons-lang3这里面有个字符串处理的工具类
技术分享图片
建一个新的过滤器BaseicAuthecationFilter
技术分享图片
继承OncePerRequestFilter
技术分享图片

@Component声明称一个组件,这样SpringBoot会自动把他加到应用的过滤器链上。
技术分享图片
注入UserRepository
技术分享图片

技术分享图片
用java.util这个包下的也可以,用Base64Utils这个也可以。
技术分享图片
根据冒号拆分成两个字符串
技术分享图片
创建这个根据UserName查询的方法
技术分享图片

技术分享图片
之前写的findByName删掉。
技术分享图片

技术分享图片

因为我们还没有写审计等的代码,这里我们先在controller里面写代码,先看到效果。
user里面getId获取到id和当前的接口传递过来的参数id对象,如果不相等就抛出异常。
技术分享图片


早User实体类里面。写一个方法,buildInfo,。把User对象转换成UserInfo对象。
技术分享图片
JPA提供的findById默认的返回类型是一个Optional的类型。
技术分享图片
所以要先get()再调用buildInfo()
技术分享图片

运行测试

现在在请求头里面根本没有带认证信息
技术分享图片
在过滤器里面,相当于这一段完全没有执行
技术分享图片
过滤过滤器会进入到controller里面。在Arttribute里面拿到的是空。所以就抛出了异常。
技术分享图片


技术分享图片

技术分享图片
发出去的完整的信息里面已经带了请求头的信息了。但是 依然报了异常
技术分享图片
这是因为创建的用户的id是5 但是回去的用户信息id是1。所以造成了id的不匹配。
技术分享图片
把请求的id改成5
技术分享图片

这样用户信息成功返回
技术分享图片
以上就是认证起作用的一个简单的例子。

 

结束

 

Spring cloud微服务安全实战-3-5 API安全机制之认证(2)

原文:https://www.cnblogs.com/wangjunwei/p/11903806.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!