热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于springOAuth2官方数据库表结构的简单权限控制

前面的文章给大家讲解了怎么实现springOAuth2来保证我们安全的流程,传送门在这里基于内存https:mp.csdn.netpostedit88553568基于

前面的文章给大家讲解了怎么实现springOAuth2来保证我们安全的流程,传送门在这里
基于内存https://mp.csdn.net/postedit/88553568
基于JDBChttps://mp.csdn.net/postedit/88576211
这篇文章主要讲下怎么实现简单的权限控制,我们在看表结构的时候,在oauth_client_details表里有一个字段是authorities。
这字段的解释是:
指定客户端所拥有的Spring Security的权限值,可选, 若有多个权限值,用逗号(,)分隔, 如: "ROLE_
我们先用这个字段来控制我们访问资源服务的权限,首先我们先用库表里的客户端数据来生成token


这里我们可以到我们的client_2的authorities是ROLE_OAUTH1
然后我们拿client_2来生成token
在这里插入图片描述
然后我们来看资源服务。
我们在我们的测试接口上面加一个权限控制的注解
@PreAuthorize

@GetMapping("/test")@PreAuthorize("hasAuthority('ROLE_OAUTH2')")public String getTest() {return "11111111111111";}

hasAuthority是spring的EL表达式,对这方面只是不太了解的同学可以看这里
https://www.yiibai.com/spring-security/spring-security-4-method-security-using-preauthorize-postauthorize-secured-el.html
OK。配置好了别以为这样就可以了,我要在ResourceServerConfiguration里面添加
@EnableGlobalMethodSecurity(prePostEnabled = true)配置来开启我们的权限注解
这样就配置完成了,非常简单,不过还是建议大家可以去研读下源码了解下实现原理,那么下面我们就行测试了。
在这里插入图片描述
失败了,原因是因为springsecurity规定只用拥有ROLE_OAUTH2权限的客户端才可以访问,但是我们刚才的client_2的authorities是ROLE_OAUTH1,所以被拒绝了,那么我们用authorities是ROLE_OAUTH2的client_3来试一下吧

生成token
在这里插入图片描述
在这里插入图片描述
访问成功了。
下面来讲解另外一个简单的权限控制,这次我们从资源服务的角度出发
首先在yml文件里面给我们的资源服务设置一个resourceId

security:oauth2:resource:jwt:key-uri: http://localhost:8882/oauth/token_keyid: resource-server

然后在ResourceServerConfiguration里面装配资源ID信息

@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {@Value("${security.oauth2.resource.id}")private String resoucreId;@Overridepublic void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().antMatchers("/registry/**").permitAll().antMatchers("/**").authenticated();}@Overridepublic void configure(ResourceServerSecurityConfigurer resources) throws Exception {resources.resourceId(resoucreId);}
}

重启服务之后我们还是用刚才生成的token来访问接口,发现还是可以访问,那么问题在哪里呢,原来是如果oauth_client_details里面的resource_ids字段为空的话是默认可以通过检验的,那么我们给client_3加上resource_ids字段信息
在这里插入图片描述
然后再来测试
在这里插入图片描述
发现失败了,然后我们再把resource_ids改成我们刚才在资源服务设置的resource-server,再来测试

这次就成功了
最后是比较简单的,如果想访问相同规则下的接口地址,可以在这里设置前缀
在这里插入图片描述
git源码地址
https://github.com/fjc440/spring-oauth2-demo/tree/feature_role


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
木棉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有