diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckBasic.java b/sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckBasic.java index 84e4a148..ffc2ac6b 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckBasic.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckBasic.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; import cn.dev33.satoken.basic.SaBasicTemplate; /** - * Http Basic 认证:只有通过 Basic 认证才能进入该方法 + * Http Basic 认证:只有通过 Basic 认证后才能进入该方法 *

可标注在函数、类上(效果等同于标注在此类的所有方法上) * @author kong * diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java index ea50727b..d137e1f9 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java @@ -76,7 +76,7 @@ public class SaTokenConfig implements Serializable { private long idTokenTimeout = 60 * 60 * 24; /** - * Http Basic 认证的账号&密码 + * Http Basic 认证的账号和密码 */ private String basic = ""; @@ -380,14 +380,14 @@ public class SaTokenConfig implements Serializable { } /** - * @return Http Basic 认证的账号&密码 + * @return Http Basic 认证的账号和密码 */ public String getBasic() { return basic; } /** - * @param basic Http Basic 认证的账号&密码 + * @param basic Http Basic 认证的账号和密码 * @return 对象自身 */ public SaTokenConfig setBasic(String basic) { diff --git a/sa-token-doc/doc/_sidebar.md b/sa-token-doc/doc/_sidebar.md index e7e200e8..940ceb5a 100644 --- a/sa-token-doc/doc/_sidebar.md +++ b/sa-token-doc/doc/_sidebar.md @@ -24,6 +24,7 @@ - [模拟他人 & 身份切换](/up/mock-person) - [同端互斥登录](/up/mutex-login) - [二级认证](/up/safe-auth) + - [Http Basic 认证](/up/basic-auth) - [密码加密](/up/password-secure) - [会话治理](/up/search-session) - [全局侦听器](/up/global-listener) diff --git a/sa-token-doc/doc/up/basic-auth.md b/sa-token-doc/doc/up/basic-auth.md new file mode 100644 index 00000000..ad4fe34b --- /dev/null +++ b/sa-token-doc/doc/up/basic-auth.md @@ -0,0 +1,85 @@ +# Http Basic 认证 + +Http Basic 是 http 协议中最基础的认证方式,其有两个特点: +- 简单、易集成。 +- 功能支持度低。 + +在 Sa-Token 中使用 Http Basic 认证非常简单,只需调用几个简单的方法 + +--- + +### 1、启用 Http Basic 认证 + +首先我们在一个接口中,调用 Http Basic 校验: +``` java +@RequestMapping("test3") +public SaResult test3() { + SaBasicUtil.check("sa:123456"); + return SaResult.ok(); +} +``` + +然后我们访问这个接口时,浏览器会强制弹出一个表单: + +![sa-basic.png](https://oss.dev33.cn/sa-token/doc/sa-basic.png 's-w-sh') + + +当我们输入账号密码后 `(sa / 123456)`,才可以继续访问数据: + +![sa-basic-ok.png](https://oss.dev33.cn/sa-token/doc/sa-basic-ok.png 's-w-sh') + + +### 2、其它启用方式 +``` java +// 对当前会话进行 Basic 校验,账号密码为 yml 配置的值(例如:sa-token.basic=sa:123456) +SaBasicUtil.check(); + +// 对当前会话进行 Basic 校验,账号密码为:`sa / 123456` +SaBasicUtil.check("sa:123456"); + +// 以注解方式启用 Basic 校验 +@SaCheckBasic(account = "sa:123456") +@RequestMapping("test3") +public SaResult test3() { + return SaResult.ok(); +} + +// 在全局拦截器 或 过滤器中启用 Basic 认证 +@Bean +public SaServletFilter getSaServletFilter() { + return new SaServletFilter() + .addInclude("/**").addExclude("/favicon.ico") + .setAuth(r -> { + SaRouter.match("/test/**", () -> SaBasicUtil.check("sa:123456")); + }); +} +``` + +### 3、URL 认证 +除了访问后再输入账号密码外,我们还可以在 URL 中直接拼接账号密码通过 Basic 认证,例如: +``` url +http://sa:123456@127.0.0.1:8081/test/test3 +``` + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sa-token-doc/doc/up/safe-auth.md b/sa-token-doc/doc/up/safe-auth.md index a7c57985..b244a992 100644 --- a/sa-token-doc/doc/up/safe-auth.md +++ b/sa-token-doc/doc/up/safe-auth.md @@ -17,7 +17,7 @@ 在`Sa-Token`中进行二级认证非常简单,只需要使用以下API: ``` java -// 在当前会话 开启二级认证 +// 在当前会话 开启二级认证,时间为120秒 StpUtil.openSafe(120); // 获取:当前会话是否处于二级认证时间内 diff --git a/sa-token-doc/doc/use/at-check.md b/sa-token-doc/doc/use/at-check.md index 8444b4a6..4158ba89 100644 --- a/sa-token-doc/doc/use/at-check.md +++ b/sa-token-doc/doc/use/at-check.md @@ -9,6 +9,7 @@ - `@SaCheckRole("admin")`: 角色认证 —— 必须具有指定角色标识才能进入该方法 - `@SaCheckPermission("user:add")`: 权限认证 —— 必须具有指定权限才能进入该方法 - `@SaCheckSafe`: 二级认证校验 —— 必须二级认证之后才能进入该方法 +- `@SaCheckBasic`: HttpBasic认证 —— 只有通过 Basic 认证后才能进入该方法 Sa-Token使用全局拦截器完成注解鉴权功能,为了不为项目带来不必要的性能负担,拦截器默认处于关闭状态
因此,为了使用注解鉴权,你必须手动将Sa-Token的全局拦截器注册到你项目中 @@ -65,6 +66,13 @@ public String add() { public String add() { return "用户增加"; } + +// Http Basic 认证:只有通过 Basic 认证后才能进入该方法 +@SaCheckBasic(account = "sa:123456") +@RequestMapping("add") +public String add() { + return "用户增加"; +} ``` 注:以上注解都可以加在类上,代表为这个类所有方法进行鉴权 diff --git a/sa-token-doc/doc/use/config.md b/sa-token-doc/doc/use/config.md index 9c261645..b5e95bd6 100644 --- a/sa-token-doc/doc/use/config.md +++ b/sa-token-doc/doc/use/config.md @@ -81,18 +81,19 @@ PS:两者的区别在于:**`方式1会覆盖yml中的配置,方式2会与y | activityTimeout | long | -1 | token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒, 默认-1 代表不限制 (例如可以设置为1800代表30分钟内无操作就过期) [参考:token有效期详解](/fun/token-timeout) | | isConcurrent | Boolean | true | 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) | | isShare | Boolean | true | 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) | -| isReadBody | Boolean | true | 是否尝试从请求体里读取token | -| isReadHead | Boolean | true | 是否尝试从header里读取token | -| isReadCookie | Boolean | true | 是否尝试从cookie里读取token | +| isReadBody | Boolean | true | 是否尝试从 请求体 里读取 Token | +| isReadHead | Boolean | true | 是否尝试从 header 里读取 Token | +| isReadCookie | Boolean | true | 是否尝试从 cookie 里读取 Token | | tokenStyle | String | uuid | token风格, [参考:自定义Token风格](/up/token-style) | | dataRefreshPeriod | int | 30 | 默认dao层实现类中,每次清理过期数据间隔的时间 (单位: 秒) ,默认值30秒,设置为-1代表不启动定时清理 | -| tokenSessionCheckLogin | Boolean | true | 获取token专属session时是否必须登录 (如果配置为true,会在每次获取token专属session时校验是否登录) | -| autoRenew | Boolean | true | 是否打开自动续签 (如果此值为true, 框架会在每次直接或间接调用getLoginId()时进行一次过期检查与续签操作) | -| tokenPrefix | Boolean | true | token前缀, 格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) [参考:自定义Token前缀](/up/token-prefix) | +| tokenSessionCheckLogin | Boolean | true | 获取 `Token-Session` 时是否必须登录 (如果配置为true,会在每次获取 `Token-Session` 时校验是否登录) | +| autoRenew | Boolean | true | 是否打开自动续签 (如果此值为true, 框架会在每次直接或间接调用 `getLoginId()` 时进行一次过期检查与续签操作) | +| tokenPrefix | Boolean | true | token前缀, 格式样例(`satoken: Bearer xxxx-xxxx-xxxx-xxxx`) [参考:自定义Token前缀](/up/token-prefix) | | isPrint | Boolean | true | 是否在初始化配置时打印版本字符画 | | isLog | Boolean | false | 是否打印操作日志 | -| jwtSecretKey | String | null | jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效) | +| jwtSecretKey | String | null | jwt秘钥 (只有集成 `sa-token-temp-jwt` 模块时此参数才会生效) | | idTokenTimeout | long | 86400 | Id-Token的有效期 (单位: 秒) | +| basic | String | "" | Http Basic 认证的账号和密码 [参考:Http Basic 认证](/up/basic-auth) | | sso | Object | new SaSsoConfig() | SSO 单点登录相关配置 | @@ -100,7 +101,7 @@ PS:两者的区别在于:**`方式1会覆盖yml中的配置,方式2会与y | 参数名称 | 类型 | 默认值 | 所属端 | 说明 | | :-------- | :-------- | :-------- | :-------- | :-------- | | ticketTimeout | long | 300 | Server端 | Ticket有效期 (单位: 秒) | -| allowUrl | String | * | Server端 | 所有允许的授权回调地址,多个用逗号隔开 (不在此列表中的URL将禁止下放ticket),[详情请参考 SSO模式二的域名校验章节] | +| allowUrl | String | * | Server端 | 所有允许的授权回调地址,多个用逗号隔开 (不在此列表中的URL将禁止下放ticket),参考:[SSO整合:配置域名校验](/sso/sso-check-domain) | | secretkey | String | null | Server端 & Client端 | 调用秘钥 (用于SSO模式三单点注销的接口通信身份校验) | | authUrl | String | null | Client端 | SSO-Server端 单点登录地址 | | isHttp | Boolean | false | Server端 & Client端 | 是否使用http请求校验ticket值 |