新增 _FINALLY_WORK_SCOPE 最终权限处理器

This commit is contained in:
click33
2024-08-20 17:34:18 +08:00
parent 0ca8a1ab2d
commit 1bc59dc14c
3 changed files with 59 additions and 2 deletions

View File

@@ -175,4 +175,47 @@ http://sa-oauth-server.com:8000/oauth2/token
拿到 userinfo。
#### 总结
相比于自定义接口模式,自定义权限处理器模式可以少一次网络请求,提前拿到 `userinfo` 信息。
相比于自定义接口模式,自定义权限处理器模式可以少一次网络请求,让 oauth2-client 端提前拿到 `userinfo` 信息。
### 4、最终权限处理器
当一个自定义权限处理器,监听的 scope 字符串为 `_FINALLY_WORK_SCOPE` 时,则代表这个权限处理器为“最终权限处理器”。
最终权限处理器会永远在所有权限处理器工作完成之后执行一次,即使 oauth2-client 端没有申请任何 scope最终权限处理器也会固定执行。
示例:
``` java
/**
* 最终权限处理器:在所有权限处理器工作完成之后,执行此权限处理器
*/
@Component
public class FinallyWorkScopeHandler implements SaOAuth2ScopeHandlerInterface {
@Override
public String getHandlerScope() {
return SaOAuth2Consts._FINALLY_WORK_SCOPE;
}
@Override
public void workAccessToken(AccessTokenModel at) {
// 在所有权限处理器工作完成之后,执行此处方法加工 AccessToken
// System.out.println(123);
}
@Override
public void workClientToken(ClientTokenModel ct) {
// System.out.println(456);
}
}
```

View File

@@ -111,5 +111,10 @@ public class SaOAuth2Consts {
/** 表示请求没有得到任何有效处理 {msg: "not handle"} */
public static final String NOT_HANDLE = "{\"msg\": \"not handle\"}";
/**
* 最终权限处理器标识符:在所有权限处理器执行之后,执行此 scope 标识符代表的权限处理器
*/
public static final String _FINALLY_WORK_SCOPE = "_FINALLY_WORK_SCOPE";
}

View File

@@ -16,6 +16,7 @@
package cn.dev33.satoken.oauth2.strategy;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.oauth2.consts.SaOAuth2Consts;
import cn.dev33.satoken.oauth2.function.strategy.*;
import cn.dev33.satoken.oauth2.scope.CommonScope;
import cn.dev33.satoken.oauth2.scope.handler.OidcScopeHandler;
@@ -92,6 +93,10 @@ public final class SaOAuth2Strategy {
}
}
}
SaOAuth2ScopeHandlerInterface finallyWorkScopeHandler = scopeHandlerMap.get(SaOAuth2Consts._FINALLY_WORK_SCOPE);
if(finallyWorkScopeHandler != null) {
finallyWorkScopeHandler.workAccessToken(at);
}
};
/**
@@ -106,6 +111,10 @@ public final class SaOAuth2Strategy {
}
}
}
SaOAuth2ScopeHandlerInterface finallyWorkScopeHandler = scopeHandlerMap.get(SaOAuth2Consts._FINALLY_WORK_SCOPE);
if(finallyWorkScopeHandler != null) {
finallyWorkScopeHandler.workClientToken(ct);
}
};
/**