说一下最后一个模块,授权。用来做访问控制,控制哪个用户能干什么。哪个用户不能干什么?
遵循最小的授权原则,一个用户只给他必须要的那些权限。
1.你的请求是不是需要权限认证, 有一些请求是根本不需要权限控制的,比如说商品信息搜索和商品信息的查看。
401代表当前请求需要认证,但是你没认证,有可能是没携带身份认证信息,比如前面讲的HttpBasic认证,没有Autorization的头,这些情况都要返回401
2.有没有权限,没有权限返回403。
401错误,发请求的人可以调整请求的信息避免掉401的错误的。比如没带上身份证明,只要带上身份证明,那么这个401就不会返回给他了
当返回403的时候,不管客户端在这个请求上再去做任何的修改,都不会导致这个403可以过去。只有一种情况就是线下去找你的管理员,给他授权了,才能过这个403.
403应该被审计日志记录下来,这样可以看到谁在访问自己没有权限的东西。
权限控制的两种方式。
ACL比较常见在linux下用户的权限
ACL
用户直接和权限挂钩。加上权限的字段表,然后重启下服务,会自动把这个字段创建到数据内。
这样数据库内就有了这个字段。
给jojo1配置上度的权限r。给jojo2配置上读写的权限rw
写代码来控制权限
使用拦截器。所有的Filter都是在interceptor之前执行的。
覆盖preHandler方法。result是声明最终的结果,是过还是不过。默认都是让他过。
这个Interceptor是整个的四个机制的最后。首先要去拿当前的用户。所有的请求先都必须加身份认证。
获取请求,根据请求的方法来判断。
、
下面来写一个hasPermisson方法。根据请求的方法来判断当前有没有权限。
user类创建hasPermission的方法。判断有没有权限。
如果是get请求,我的permisson里面有r
如经过不是get请求,就判断是否有w也就是写的权限。
首先是限流,先输出一个1
认证输出2
审计日志
访问控制输出4
配置拦截器
生效的顺序是按照add的顺序
启动服务测试
没有传身份认证信息
返回的就是代码这里的提示
传入用户jojo1
提示没有写的权限
改成jojo2。这是一个有读写权限的用户。
注意这里创建的是jojo3.
返回200,说明认证授权机制基本上已经生效了。
api安全注意的点,有了个简单的实现。
数据库内的审计日志
输出的拦截器的执行顺序问题。也是按照我们想要的顺序这么来执行的。