栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

原来SpringSecurity整合OAuth2后开放权限拦截路径还能这么玩?

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

原来SpringSecurity整合OAuth2后开放权限拦截路径还能这么玩?

当我们整合了Spring Security以及OAuth2后发现,有一些业务请求是需要开放的,因为种种原因这时访问者还没有身份标识(比如:用户刚来,还没有注册,需要进行新用户注册,这时注册业务相关的接口都应该是开放的),下面我们来看看ApiBoot是怎么排除路径不进行权限拦截的。

官方相关文档

相关ApiBoot Security官方使用文档,请访问 ApiBoot Security。

在文档的第4. 默认排除路径部分,我们了解到了ApiBoot Security为了与其他的第三方框架进行集成,在内部已经添加了一些默认的拦截路径,当我们在添加开放路径时会在默认的基础上增量添加,不会覆盖

博客原文地址:http://blog.yuqiyu.com/apiboot-security-open-paths-without-intercept.html

创建项目

我们使用IDEA开发工具创建一个SpringBoot项目,在pom.xml内添加相关的依赖,如下所示:


  
    org.springframework.boot
    spring-boot-starter-web
  
  
  
    org.minbox.framework
    api-boot-starter-security-oauth-jwt
  



  
    
    
      org.minbox.framework
      api-boot-dependencies
      2.2.0.RELEASE
      pom
      import
    
  

排除路径配置

ApiBoot Security OAuth安全组件默认拦截配置为/api @RestController @RequestMapping(value = "/index") public class IndexController { @GetMapping public String index() { return "this is index page."; } @GetMapping(value = "/sub") public String indexSub() { return "this is sub index page."; } }

在application.yml我们配置的开放地址为/index/**,所以IndexController控制器内的两个地址/index、/index/sub都会被开放,不走权限拦截,直接放行。

运行测试

我们使用IDEA通过XxxApplication入口类的方式来启动本章项目源码,下面是我们要验证的测试点。

测试点:开放路径

我们先来访问下http://localhost:9090/index,效果如下所示:

➜ ~ curl http://localhost:9090/index    
this is index page.

直接访问/index是可以直接获取接口返回的内容,这也证明了一点,这个地址被开放了,不再被权限拦截。

在之前说到ApiBoot Security OAuth开放地址支持Ant风格,我们配置的开放地址为/index/**,所以/index/sub这个请求地址也应该已经被开放了,效果如下所示:

➜ ~ curl http://localhost:9090/index/sub
this is sub index page.

如果我们修改api.boot.security.ignoring-urls配置为/index,我们在访问/index/sub这个地址时是没有权限的,需要携带有效的AccessToken才可以访问到。

测试点:未开放路径的拦截

下面我们来完成一个比较特殊的测试点,访问一个并没有在后台定义的路径,如下所示:

➜ ~ curl http://localhost:9090/index/11
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}

我们并没有添加/index/xx这个请求地址的实现,当访问时同样也会被拦截,这证明了我们发起的请求并没有到达解析请求就已经被权限拦截了。

敲黑板,划重点

除了被开放的路径都需要提供有效的AccessToken才可以访问,无论这个地址是否存在,本章为了示例讲解方便我这里配置的权限拦截根地址为/**,api.boot.security.auth-paths参数源码是一个数组(详见:org.minbox.framework.api.boot.autoconfigure.security.ApiBootSecurityProperties),可以配置多个地址,比如:/user/**、/order/**,api.boot.security.ignoring-urls同样支持数组形式配置多个。

免费教程专题

恒宇少年在博客整理三套免费学习教程专题,由于文章偏多特意添加了阅读指南,新文章以及之前的文章都会在专题内陆续填充,希望可以帮助大家解惑更多知识点。

  • SpringBoot基础教程专题
  • SpringCloud基础教程专题
  • ApiBoot基础教程专题
代码示例

如果您喜欢本篇文章请为源码仓库点个Star,谢谢!!!
本篇文章示例源码可以通过以下途径获取,目录为apiboot-security-open-paths-without-intercept:

  • Gitee:https://gitee.com/minbox-projects/api-boot-chapter

作者个人 博客
使用开源框架 ApiBoot 助你成为Api接口服务架构师

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号