diff --git a/README_CN.md b/README_CN.md index 49b1bf54d4d197576a89766f8d9bacb409ca74e2..c7f34da26459cd8dfe7a74a17cb55f8a94262df0 100644 --- a/README_CN.md +++ b/README_CN.md @@ -19,21 +19,21 @@ ## Background 现在很多网站都进行了前后端分离,后端提供rest api,前端调用接口获取数据渲染。这种架构下如何保护好后端所提供的rest api使得更加重视。 -api的保护可以认为:认证-请求携带的认证信息是否校验通过,鉴权-认证通过的用户拥有指定api的权限才能访问此api。然而不仅于此,什么样的认证策略, jwt, basic,digest,oauth还是多支持, 权限配置是写死代码还是动态配置,我想动态赋权怎么办,云原生越来越火用的框架是quarkus等新秀不是spring生态咋弄,http实现不是servlet而是jax-rs规范咋整, to be or not to be, this is a question +认证-请求携带的认证信息是否校验通过,鉴权-认证通过的用户拥有指定api的权限才能访问此api。然而不仅于此,什么样的认证策略, jwt, basic,digest,oauth还是多支持, 权限配置是写死代码还是动态配置,我想动态赋权怎么办,云原生越来越火用的框架是quarkus等新秀不是spring生态咋弄,http实现不是servlet而是jax-rs规范咋整。 > 目前`java`主流的权限框架有`shiro,spring security`, 下面对于它们的探讨都是个人之见,接受纠正 > `shiro`对于`restful api`原生支持不太友好,需要改写一些代码,2年前一个项目 [booshiro](https://gitee.com/tomsun28/bootshiro) 就是改造`shiro`,使其在过滤链就能匹配不同的`rest`请求进行权限校验,之后给`shiro commit`几次`pr`,`fix`其在过滤链匹配时的危险漏洞,总的来说`shiro`很强大但其起源并非面向`web`,对`restful`不是很友好 -> `spring security`很强大,与`spring`深度集成,离开`spring`,比如`javalin`和之前用过的`osgi`框架`karaf`就用不了了 -> 如果不用注解配置,它们都会在链式匹配这块,用请求的url和配置的链一个一个`ant`匹配(匹配过程中会有缓存等提高性能),但匹配的链过多时还是比较耗性能(根据算法时间复杂度判断,暂未测试验证) -> 我们希望能解决这些,提供一个**针对restful api**,**无框架依赖**,可以**动态修改权限**,**多认证策略**,**更快速度**,**易用**的认证鉴权框架 +> `spring security`很强大,与`spring`深度集成,离开`spring`,和其他框架就不太好集成使用 +> 如果不用注解配置,它们都会在链式匹配这块,用请求的`url`和配置的链一个一个`ant`匹配(匹配过程中会有缓存等提高性能),但匹配的链过多时还是比较耗性能(根据算法时间复杂度判断,暂未测试验证) +> 我们希望能解决这些,提供一个**针对`restful api`**,**无框架依赖**,可以**动态修改权限**,**多认证策略**,**更快速度**,**易用**的认证鉴权框架 ## Introduction > `sureness` 是我们在使用 `java` 权限框架 `shiro` 之后,吸取其良好设计加上一些想法实现的全新认证鉴权项目 > 面对 `restful api` 的认证鉴权,基于 `rbac` (用户-角色-资源)主要关注于对 `restful api` 的安全保护 -> 无特定框架依赖(本质就是过滤器处拦截判断,已有springboot,quarkus,javalin,ktor等demo) -> 支持动态修改权限配置(动态修改哪些api需要被认证,可以被谁访问) -> 支持主流http容器 servlet 和 jax-rs +> 无特定框架依赖(本质就是过滤器处拦截判断,已有`springboot,quarkus,javalin,ktor`等demo) +> 支持动态修改权限配置(动态修改哪些`api`需要被认证,可以被谁访问) +> 支持主流`http`容器 `servlet` 和 `jax-rs` > 支持多种认证策略, `jwt, basic auth, digest auth` ... 可扩展自定义支持的认证方式 > [基于改进的字典匹配树拥有的高性能](#高性能匹配 ) > 良好的扩展接口, demo和文档 @@ -61,7 +61,7 @@ api的保护可以认为:认证-请求携带的认证信息是否校验通过 `eg: /api/v2/book===get` `get`方式请求`/api/v2/book`接口数据 - 角色资源映射: 用户所属角色--角色拥有资源--用户拥有资源(用户就能访问此`api`) -资源路径匹配详见 [url路径匹配](docs/cn/path-match.md) +资源路径匹配详见 [URI路径匹配](docs/cn/path-match.md) #### 项目中加入sureness @@ -78,8 +78,8 @@ compile group: 'com.usthe.sureness', name: 'sureness-core', version: '0.4.2' ``` #### 使用默认配置来配置sureness -默认配置使用了文件数据源sureness.yml作为账户权限数据源 -默认配置支持了jwt, basic auth, digest auth认证 +默认配置使用了文件数据源`sureness.yml`作为账户权限数据源 +默认配置支持了`jwt, basic auth, digest auth`认证 ``` @Bean public DefaultSurenessConfig surenessConfig() { @@ -104,7 +104,7 @@ public DefaultSurenessConfig surenessConfig() { #### 添加过滤器拦截所有请求 -`sureness`的本质就拦截所有rest请求对其认证鉴权判断。 +`sureness`的本质就拦截所有`rest`请求对其认证鉴权判断。 入口拦截器器实现一般可以是 `filter or spring interceptor` 在拦截器中加入`sureness`的安全过滤器,如下: @@ -177,7 +177,7 @@ try { ## 参与贡献 -非常欢迎参与项目贡献,跟sureness一起走得更远更好。对项目代码有疑问或者建议请直接联系 @tomsun28 +非常欢迎参与项目贡献。对项目代码有疑问或者建议请直接联系 @tomsun28 仓库的组成部分: - [sureness的核心代码--sureness-core](core) diff --git a/docs/cn/README.md b/docs/cn/README.md index d00549f501c09c9ebc9ecea6ae626203807c064f..59f7113ed73e6f99616fd314a91472001c3af63a 100644 --- a/docs/cn/README.md +++ b/docs/cn/README.md @@ -16,33 +16,33 @@ ## Background 现在很多网站都进行了前后端分离,后端提供rest api,前端调用接口获取数据渲染。这种架构下如何保护好后端所提供的rest api使得更加重视。 -api的保护可以认为:认证-请求携带的认证信息是否校验通过,鉴权-认证通过的用户拥有指定api的权限才能访问此api。然而不仅于此,什么样的认证策略, jwt, basic,digest,oauth还是多支持, 权限配置是写死代码还是动态配置,我想动态赋权怎么办,云原生越来越火用的框架是quarkus等新秀不是spring生态咋弄,http实现不是servlet而是jax-rs规范咋整, to be or not to be, this is a question +认证-请求携带的认证信息是否校验通过,鉴权-认证通过的用户拥有指定api的权限才能访问此api。然而不仅于此,什么样的认证策略, jwt, basic,digest,oauth还是多支持, 权限配置是写死代码还是动态配置,我想动态赋权怎么办,云原生越来越火用的框架是quarkus等新秀不是spring生态咋弄,http实现不是servlet而是jax-rs规范咋整。 > 目前`java`主流的权限框架有`shiro,spring security`, 下面对于它们的探讨都是个人之见,接受纠正 > `shiro`对于`restful api`原生支持不太友好,需要改写一些代码,2年前一个项目 [booshiro](https://gitee.com/tomsun28/bootshiro) 就是改造`shiro`,使其在过滤链就能匹配不同的`rest`请求进行权限校验,之后给`shiro commit`几次`pr`,`fix`其在过滤链匹配时的危险漏洞,总的来说`shiro`很强大但其起源并非面向`web`,对`restful`不是很友好 -> `spring security`很强大,与`spring`深度集成,离开`spring`,比如`javalin`和之前用过的`osgi`框架`karaf`就用不了了 -> 如果不用注解配置,它们都会在链式匹配这块,用请求的url和配置的链一个一个`ant`匹配(匹配过程中会有缓存等提高性能),但匹配的链过多时还是比较耗性能(根据算法时间复杂度判断,暂未测试验证) -> 我们希望能解决这些,提供一个**针对restful api**,**无框架依赖**,可以**动态修改权限**,**多认证策略**,**更快速度**,**易用**的认证鉴权框架 +> `spring security`很强大,与`spring`深度集成,离开`spring`,和其他框架就不太好集成使用 +> 如果不用注解配置,它们都会在链式匹配这块,用请求的`url`和配置的链一个一个`ant`匹配(匹配过程中会有缓存等提高性能),但匹配的链过多时还是比较耗性能(根据算法时间复杂度判断,暂未测试验证) +> 我们希望能解决这些,提供一个**针对`restful api`**,**无框架依赖**,可以**动态修改权限**,**多认证策略**,**更快速度**,**易用**的认证鉴权框架 ## Introduction > `sureness` 是我们在使用 `java` 权限框架 `shiro` 之后,吸取其良好设计加上一些想法实现的全新认证鉴权项目 > 面对 `restful api` 的认证鉴权,基于 `rbac` (用户-角色-资源)主要关注于对 `restful api` 的安全保护 -> 无特定框架依赖(本质就是过滤器处拦截判断,已有springboot,quarkus,javalin,ktor等demo) -> 支持动态修改权限配置(动态修改哪些api需要被认证,可以被谁访问) -> 支持主流http容器 servlet 和 jax-rs +> 无特定框架依赖(本质就是过滤器处拦截判断,已有`springboot,quarkus,javalin,ktor`等demo) +> 支持动态修改权限配置(动态修改哪些`api`需要被认证,可以被谁访问) +> 支持主流`http`容器 `servlet` 和 `jax-rs` > 支持多种认证策略, `jwt, basic auth, digest auth` ... 可扩展自定义支持的认证方式 -> 基于改进的字典匹配树拥有的高性能 +> [基于改进的字典匹配树拥有的高性能](#高性能匹配 ) > 良好的扩展接口, demo和文档 >`sureness`的低配置,易扩展,不耦合其他框架,能使开发者对自己的项目多场景快速安全的进行保护 ##### Framework Sample Support -- [x] spring [sample-bootstrap](cn/sample-bootstrap.md) -- [x] springboot [sample-tom](cn/sample-tom.md) -- [x] quarkus [sample-quarkus](cn/sample-quarkus.md) -- [x] javalin [sample-javalin](cn/sample-javalin.md) -- [x] ktor [sample-ktor](cn/sample-ktor.md) -- [x] spring webflux [spring-webflux-sureness](cn/sample-spring-webflux.md) +- [x] spring [sample-bootstrap](sample-bootstrap) +- [x] springboot [sample-tom](sample-tom) +- [x] quarkus [sample-quarkus](samples/quarkus-sureness) +- [x] javalin [sample-javalin](samples/javalin-sureness) +- [x] ktor [sample-ktor](samples/ktor-sureness) +- [x] spring webflux [sample-spring-webflux](samples/spring-webflux-sureness) - [x] more samples todo diff --git a/docs/cn/_coverpage.md b/docs/cn/_coverpage.md index 37b4d9d175c5804697b09019a5ccd36fbeaba760..1644921dff58c29bd398c5fde0ce32fd5b327c01 100644 --- a/docs/cn/_coverpage.md +++ b/docs/cn/_coverpage.md @@ -5,8 +5,8 @@ > A Simple and Efficient Open-source Jvm Security Framework that Focus on Protection of Restful Api. - 基于 `rbac` (用户-角色-资源)主要关注于对 `restful api` 的安全保护 -- 无特定框架依赖(springboot,quarkus,javalin,ktor等demo) -- 支持主流http容器 servlet 和 jax-rs +- 无特定框架依赖(`springboot,quarkus,javalin,ktor`等demo) +- 支持主流`http`容器 `servlet` 和 `jax-rs` - 支持动态权限配置 - 支持多种认证策略 diff --git a/docs/cn/contributing.md b/docs/cn/contributing.md index a700ca9c4b47dac9027c881789fdf69c2d1e3ea2..bfefae9d10ac8dd9bf603f49a837c1db03a39cfa 100644 --- a/docs/cn/contributing.md +++ b/docs/cn/contributing.md @@ -1,7 +1,7 @@ 参与贡献 ======================================= -非常欢迎参与项目贡献,帮助sureness走得更远更好。对项目代码有疑问或者建议请直接联系 @tomsun28 +非常欢迎参与项目贡献。对项目代码有疑问或者建议请直接联系 @tomsun28 仓库的组成部分: - [sureness的核心代码--sureness-core](https://github.com/tomsun28/sureness/tree/master/core) diff --git a/docs/cn/custom-datasource.md b/docs/cn/custom-datasource.md index 3bb8525b8a1e58d66b4dbf4155dec68b981110ff..9ee629e87f9d6ea1f02acaef1d01117c4b9fe4e8 100644 --- a/docs/cn/custom-datasource.md +++ b/docs/cn/custom-datasource.md @@ -1,6 +1,6 @@ ## 自定义数据源 -自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) +自定义前需要了解`sureness`提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) 实现 `PathTreeProvider`的接口, 加载到`DefaultPathRoleMatcher`中 实现 `SurenessAccountProvider`的接口,加载到需要的`processor`中 diff --git a/docs/cn/custom-processor.md b/docs/cn/custom-processor.md index 081008a0bc9f9c71d4dd1aa91bf1b7ebd72bd30c..07203c2d76c265dfb6b745404863b3daea3dc919 100644 --- a/docs/cn/custom-processor.md +++ b/docs/cn/custom-processor.md @@ -1,6 +1,6 @@ ## 自定义processor -自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) +自定义前需要了解`sureness`提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) 一个`subject`当然也可以被不同的`processor`处理,所以可以单独自定义`processor` 实现`Processor`接口,设置支持的`subject`,实现处理该`subject`的逻辑 diff --git a/docs/cn/custom-subject-creator.md b/docs/cn/custom-subject-creator.md index a6dd0808a07d864fc015736928757782d464c141..b5a17deaeefcec3ff30fe32e7d823f3433aea7aa 100644 --- a/docs/cn/custom-subject-creator.md +++ b/docs/cn/custom-subject-creator.md @@ -1,9 +1,9 @@ ## 自定义subject creator -自定义subject creator是我们使用频率最高的扩展,当请求体对象并不是servlet或者jax-rs标准api时, 我们就需要自定义subject creator, -使其通过请求对象获取我们需要的请求信息(请求路径,请求方法,认证信息等), 从而创建出对应的subject +自定义`subject creator`是我们使用频率最高的扩展,当请求体对象并不是`servlet`或者`jax-rs`标准`api`时, 我们就需要自定义`subject creator`, +使其通过请求对象获取我们需要的请求信息(请求路径,请求方法,认证信息等), 从而创建出对应的`subject` -自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) +自定义前需要了解`sureness`提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) - `SubjectCreate`: 创建`Subject`接口,根据请求内容创建不同类型的`Subject`对象 diff --git a/docs/cn/custom-subject.md b/docs/cn/custom-subject.md index b45a21119a9e58bad4cb05a00e4cd8e3f4e2577b..004a4f46378318fc39fdbeee1cb26fe4137f13ef 100644 --- a/docs/cn/custom-subject.md +++ b/docs/cn/custom-subject.md @@ -1,6 +1,6 @@ ## 自定义subject -自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) +自定义前需要了解`sureness`提供的扩展接口,详见 [进阶扩展](cn/extend-point.md) 实现`Subject`接口,添加自定义的`subject`内容 实现`SubjectCreate`接口方法,创建出自定义的`subject` diff --git a/docs/cn/default-auth.md b/docs/cn/default-auth.md index 2eafe324acfe6bc1c60b7518d58e70c19399a6e5..d7ba653de17bee6cd649c57d1c522c9358133223 100644 --- a/docs/cn/default-auth.md +++ b/docs/cn/default-auth.md @@ -35,12 +35,12 @@ Authorization: Basic dG9tOjMyMTEz 下面是`digest auth`的认证流程(图片来源于[网络](https://www.cnblogs.com/xiaoxiaotank/p/11078571.html)): ![digestFlow](../_images/digestFlow.png) -我们可以在chrome浏览器直接使用它: 访问url,在弹出的对话框中输入账户密码即可,chrome浏览器会自动进行认证流程. +我们可以在`chrome`浏览器直接使用它: 访问`url`,在弹出的对话框中输入账户密码即可,`chrome`浏览器会自动进行认证流程. ![digestAuthChromeUse](../_images/digestAuthUse.png) #### 其他认证方式 -目前sureness默认支持这三种主流的认证方式,满足绝大部分需求,当然你也可以很轻松的自定义认证方式,详见[自定义Subject](cn/custom-subject.md) +目前`sureness`默认支持这三种主流的认证方式,满足绝大部分需求,当然你也可以很轻松的自定义认证方式,详见[自定义Subject](cn/custom-subject.md) 我们提供了默认认证方式的使用`DEMO`,请参考 [使用sureness10分钟项目集成案例](cn/sample-bootstrap.md) 当然我们也提供了自定义认证方式的扩展`DEMO`,请参考 [使用sureness30分钟项目集成案例](cn/sample-tom.md) diff --git a/docs/cn/quickstart.md b/docs/cn/quickstart.md index 74fe049bf43c499b236dc415f1dcd62f2ae2911d..b1d5ea196f4628b0b1686d99d0b0f1d88445a2b1 100644 --- a/docs/cn/quickstart.md +++ b/docs/cn/quickstart.md @@ -25,8 +25,8 @@ compile group: 'com.usthe.sureness', name: 'sureness-core', version: '0.4.2' ``` #### 使用默认配置来配置sureness -默认配置使用了文件数据源sureness.yml作为账户权限数据源 -默认配置支持了jwt, basic auth, digest auth认证 +默认配置使用了文件数据源`sureness.yml`作为账户权限数据源 +默认配置支持了`jwt, basic auth, digest auth`认证 ``` @Bean public DefaultSurenessConfig surenessConfig() { diff --git a/docs/cn/sample-spring-webflux.md b/docs/cn/sample-spring-webflux.md index 4118852353b86c761ceaa408b2bb3eab51b81b58..64166a97d61f6c19da1486d3fc7c5231692a4030 100644 --- a/docs/cn/sample-spring-webflux.md +++ b/docs/cn/sample-spring-webflux.md @@ -3,7 +3,7 @@ [spring-webflux-sureness例子项目仓库地址](https://github.com/tomsun28/sureness/tree/master/samples/spring-webflux-sureness) - 基于`spring-webflux` -- 自定义 subject creator (BasicSubjectReactiveCreator, JwtSubjectReactiveCreator, NoneSubjectReactiveCreator) 适配 ServerHttpRequest 请求体 +- 自定义 `subject creator (BasicSubjectReactiveCreator, JwtSubjectReactiveCreator, NoneSubjectReactiveCreator)` 适配 `ServerHttpRequest` 请求体 - 从默认的配置文件`sureness.yml`加载账户信息,资源角色,过滤资源等信息 - 使用默认的`jwt,basic auth`方式认证鉴权 - 例子中包含`restful api` diff --git a/docs/cn/sample-tom.md b/docs/cn/sample-tom.md index c02af24a82b63146a59c42d0403fd8d5afc854d4..eb2ac2fd397eff237a28f8283dc85e639e9bbf11 100644 --- a/docs/cn/sample-tom.md +++ b/docs/cn/sample-tom.md @@ -9,9 +9,9 @@ 样例中包含2种自定义认证鉴权方式: -1. 自定义了一个单独的subjectCreator 见 `CustomPasswdSubjectCreator` -演示功能就是自定义的从不同地方获取请求体的账户密码,来创建默认的PasswordSubject,走默认的账户密码认证流程 +1. 自定义了一个单独的`subjectCreator` 见 `CustomPasswdSubjectCreator` +演示功能就是自定义的从不同地方获取请求体的账户密码,来创建默认的`PasswordSubject`,走默认的账户密码认证流程 -2. 自定义了一整套流程(包含subject subjectCreator processor) 见 `CustomTokenSubject CustomTokenSubjectCreator CustomTokenProcessor` -演示功能就是自定义一个简单的token作为subject对象,对其自定义创建获取方式-creator和自定义认证鉴权处理流程-processor. -此自定义流程也演示了一个简单的token刷新流程 \ No newline at end of file +2. 自定义了一整套流程(包含`subject subjectCreator processor`) 见 `CustomTokenSubject CustomTokenSubjectCreator CustomTokenProcessor` +演示功能就是自定义一个简单的`token`作为`subject`对象,对其自定义创建获取方式-`creator`和自定义认证鉴权处理流程-`processor`. +此自定义流程也演示了一个简单的`token`刷新流程 \ No newline at end of file