基于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