提交 fe135e51 编写于 作者: sinat_25235033's avatar sinat_25235033

update doc--add default-auth and modify other docs, markdown support mermaid

上级 dfa80441
- 入门
- [介绍](README.md "introduce")
- [快速开始](quickstart.md "quick start greatest")
- 进阶扩展
- [URI路径匹配](path-match.md)
- [默认数据源](default-datasource.md)
- [默认认证方式](default-auth.md)
- [默认异常](default-exception.md)
- 进阶扩展
- [扩展点](extend-point.md)
- [自定义数据源](custom-datasource.md)
- [自定义Subject](custom-subject.md)
......@@ -14,8 +17,6 @@
- [30分钟项目集成](sample-tom.md)
- 其它
- [url路径匹配](path-match.md)
- [sureness异常](exception.md)
- [设计文档](design.md)
- [参与贡献](contributing.md)
- [Changelog](https://github.com/tomsun28/sureness/releases ':ignore')
## 自定义数据源
自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](extend-point.md)
实现 `PathTreeProvider`的接口, 加载到`DefaultPathRoleMatcher`中.
实现 `SurenessAccountProvider`的接口,加载到需要的`processor`中.
具体扩展实践请参考 [使用sureness30分钟搭建权限项目--sample-tom](https://github.com/tomsun28/sureness)
具体扩展实践请参考 [使用sureness30分钟项目集成案例](sample-tom.md)
## 自定义processor
自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](extend-point.md)
一个`subject`当然也可以被不同的`processor`处理,所以可以单独自定义`processor`
实现`Processor`接口,设置支持的`subject`,实现处理该`subject`的逻辑
具体扩展实践请参考 [使用sureness30分钟搭建权限项目--sample-tom](https://github.com/tomsun28/sureness)
具体扩展实践请参考 [使用sureness30分钟项目集成案例](sample-tom.md)
\ No newline at end of file
## 自定义subject
自定义前需要了解sureness提供的扩展接口,详见 [进阶扩展](extend-point.md)
实现`Subject`接口,添加自定义的`subject`内容
实现`SubjectCreate`接口方法,创建出自定义的`subject`
实现`Processor`接口,支持处理自定义的`subject`
具体扩展实践请参考 [使用sureness30分钟搭建权限项目--sample-tom](https://github.com/tomsun28/sureness)
具体扩展实践请参考 [使用sureness30分钟项目集成案例](sample-tom.md)
\ No newline at end of file
## 默认支持的认证方式
`sureness`目前默认支持的认证方式有`bearer jwt`,`basic auth`, 当然用户可以通过扩展`Processor`,`Subject``SubjectCreate`接口实现自定义的认证方式
#### `bearer jwt`
`jwt``json web token`,是目前很流行的跨域,无状态,安全认证解决方案,介绍详见[网络](http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html)
我们这里为啥叫`bearer jwt`是因为`jwt`是放入到http请求头的`bearer token`里面,即: `Authorization: Bearer jsonWebTokenValue`
eg:
```
GET /api/v1/source1 HTTP/1.1
Host: localhost:8088
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNocjEEOwiAQRe8y65IwCBQ4hlvjotAhVqs1DBoT492l7F5e_vtfuNYFAliUPs3aCrIuCW1nFDHlUaBVqJOLJpkIA_ArtnHd7o0X5s43egim8qayy6lCQOOUd15JHIA-zy4OUo5dlG2lFp46KDjvR0fKhfgCIU8r0-8PAAD__w.f-3klWWDpEO3uDLlx2S53DV2cYernwVEDwcC6z1JexocbZoxRKmASTOuky1qMCxy_hV8-RbuMjDmI3ASa_FQOw
```
我们可以在`postman`如下使用它: 将`jwt`值塞入`Bearer Token`里.
![jwtPostmanUse](_images/jwtPostmanUse.png)
#### `basic auth`
`basic auth``Basic access authentication`,经典的`http`基本认证方式,介绍详见[网络](https://www.jianshu.com/p/4cd42f7359f4)
这种认证方式是将账户密码组成的字符串`base64`加密,放入到请求头的 `Authorization`中, 即:`Authorization: Basic base64encode(username+":"+password)`
eg:
```
GET /api/v1/source1 HTTP/1.1
Host: localhost:8088
Content-Type: application/json
Authorization: Basic dG9tOjMyMTEz
```
我们可以在`postman`如下使用它: 在`Basic Auth`类型的`Authorization`中输入账户密码即可,`postman`会自动对其`base64`加密.
![basicAuthPostmanUse](_images/basicAuthPostmanUse.png)
#### 其他认证方式
目前sureness暂支持这两种,之后会陆续扩展其他基本认证方式,当然你也可以很轻松的自定义认证方式,详见[自定义Subject](custom-subject.md)
我们提供了默认认证方式的使用`DEMO`,请参考 [使用sureness10分钟项目集成案例](sample-bootstrap.md)
当然我们也提供了自定义认证方式的扩展`DEMO`,请参考 [使用sureness30分钟项目集成案例](sample-tom.md)
# 默认数据源
## 默认数据源
`sureness`认证鉴权当然也需要我们自己的配置数据:账户数据,角色权限数据等
这些配置数据可能来自文本,关系数据库,非关系数据库
......@@ -54,4 +54,5 @@ account:
```
我们提供了默认文本数据源使用`DEMO`,默认文本数据源具体实现,请参考[使用sureness10分钟搭建权限项目--sample-bootstrap](https://github.com/tomsun28/sureness/tree/master/sample-bootstrap)
我们提供了默认文本数据源使用`DEMO`,默认文本数据源具体实现,请参考 [使用sureness10分钟项目集成案例](sample-bootstrap.md)
当然数据源也可以来自数据库等存储,我们提供了接口让用户轻松的自定义数据源,详见[自定义数据源](custom-datasource.md)
\ No newline at end of file
## sureness 异常
## sureness 默认异常
`sureness`使用异常处理流程,我们需要对`checkIn`的认证鉴权流程中发生的认证失败或无权限访问等抛出的相应异常做自定义处理,
若认证鉴权成功,则直接通过,失败抛出特定异常,捕获异常,流程如下:
```
try {
SubjectSum subject = SurenessSecurityManager.getInstance().checkIn(servletRequest);
} catch (ProcessorNotFoundException | UnknownAccountException | UnsupportedSubjectException e4) {
// 账户创建相关异常
} catch (DisabledAccountException | ExcessiveAttemptsException e2 ) {
// 账户禁用相关异常
} catch (IncorrectCredentialsException | ExpiredCredentialsException e3) {
// 认证失败相关异常
} catch (UnauthorizedException e5) {
// 鉴权失败相关异常
} catch (RuntimeException e) {
// 其他自定义异常
}
```
sureness 默认支持的异常处理流程中的异常如下:
`sureness`异常 | 异常描述
--- | ---
......
......@@ -19,5 +19,4 @@ A(用户请求体进来) --> B(s)
B(subjectCreate根据请求头内容创建不同的钥匙subject,每把钥匙都可以尝试) --> C(s)
C(不同的钥匙认证方式即不同的锁processor来处理进来的钥匙subject) --> D(s)
D(以上一次成功即成功并结束,失败即下一个钥匙锁尝试直到所有尝试结束)
```
```
\ No newline at end of file
......@@ -10,10 +10,16 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<!-- 样式主题vue网站样式-->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/lib/themes/vue.css">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
<!--support mermaid 图表-->
<script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
</head>
<body>
<div id="app">冲鸭!...</div>
<script>
var num = 0;
mermaid.initialize({ startOnLoad: false });
window.$docsify = {
auto2top: true,
coverpage: ['/', '/en/'],
......@@ -40,6 +46,19 @@
fontsize:'0.9em',
color:'rgba(240,240,240,0.06)',
language:'chinese'
},
<!--support mermaid 图表-->
markdown: {
renderer: {
code: function(code, lang) {
if (lang === "mermaid") {
return (
'<div class="mermaid">' + mermaid.render('mermaid-svg-' + num++, code) + "</div>"
);
}
return this.origin.code.apply(this, arguments);
}
}
}
}
</script>
......
## url路径匹配
## URI路径匹配
我们配置的资源格式为:`requestUri===httpMethod`, 即请求的路径加上其请求方式(`post,get,put,delete...`)作为一个整体被视作一个资源
`eg: /api/v2/book===get` `get`方式请求`/api/v2/book`接口数据
这里的`requestUri`支持url路径匹配: `*`, `**`
这里的`requestUri`支持url路径匹配符匹配: `*`, `**`
通配符 | 描述
--- | ---
......@@ -17,3 +17,5 @@
`/**/foo` | 可以匹配 `/api/user/book/foo`
匹配优先级: 原始字符串 > `*` > `**`
最长路径匹配原则:
eg: `requestUri``/app/book/foo`,若存在两个路径匹配模式`/app/**``/app/book/*`,则会匹配到`/app/book/*`
\ No newline at end of file
......@@ -63,7 +63,7 @@ SurenessSecurityManager.getInstance().checkIn(servletRequest)
// 其他自定义异常
}
```
异常详见 [sureness 异常](exception.md)
异常详见 [sureness 异常](default-exception.md)
### 加载配置数据
......@@ -74,7 +74,7 @@ SurenessSecurityManager.getInstance().checkIn(servletRequest)
默认文本数据源配置详见 [默认数据源](default-datasource.md)
我们提供了默认文本数据源使用`DEMO`,默认文本数据源具体实现,请参考[使用sureness10分钟搭建权限项目--sample-bootstrap](https://github.com/tomsun28/sureness/tree/master/sample-bootstrap)
若权限配置数据来自数据库,请参考[使用sureness30分钟搭建权限项目--sample-tom](https://github.com/tomsun28/sureness/tree/master/sample-tom)
我们提供了默认文本数据源使用`DEMO`,默认文本数据源具体实现,请参考 [使用sureness10分钟项目集成案例](sample-bootstrap.md)
若权限配置数据来自数据库,请参考 [使用sureness30分钟项目集成案例](sample-tom.md)
**HAVE FUN**
\ No newline at end of file
## Sample-bootstrap
[sureness 10分钟例子项目](https://github.com/tomsun28/sureness/tree/master/sample-bootstrap)
[sureness 10分钟例子项目仓库地址](https://github.com/tomsun28/sureness/tree/master/sample-bootstrap)
- 基于`springboot`
- 从默认的配置文件`sureness.yml`加载账户信息,资源角色,过滤资源等信息
......
## Sample-tom
[sureness 30分钟例子项目](https://github.com/tomsun28/sureness/tree/master/sample-tom)
[sureness 30分钟例子项目仓库地址](https://github.com/tomsun28/sureness/tree/master/sample-tom)
- 基于`springboot,jpa...`
- 自定义数据源,使用从数据库加载账户信息,资源角色,过滤资源等信息,这样便于动态调整
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册