跳到主要内容

7.1 身份接入

IdentityProvider 为每次请求提供应用已验证的 UserIdentity。可通过请求属性接入,也可从应用安全上下文获取。

选择身份​

创建方法权限
anonymous(attributes)无操作权限
authenticated(id, attributes)调用已发布 API、读取文档
consoleReadOnly(id, attributes)API、文档及控制台只读操作
consoleAdmin(id, attributes)全部操作,包括调试与写入

根据应用已验证的用户角色创建身份:

创建用户身份
import java.util.Map;
import net.hasor.dataway.authorization.UserIdentity;

Map<String, Object> attributes = Map.of("tenant", tenantId);
UserIdentity identity = switch (role) {
case "admin" -> UserIdentity.consoleAdmin(userId, attributes);
case "reader" -> UserIdentity.consoleReadOnly(userId, attributes);
case "api" -> UserIdentity.authenticated(userId, attributes);
default -> UserIdentity.anonymous(Map.of());
};

权限由创建方法决定。identityId() 返回用户标识,attributes() 返回创建时复制的只读属性 Map,嵌套对象由应用保持不可变。

接入请求身份​

登录拦截器校验用户后,将身份写入请求属性:

Spring / Hasor
request.setAttribute("host.identity", identity);
Solon
context.attrSet("host.identity", identity);
Dataway 读取请求身份
import net.hasor.dataway.authorization.RequestIdentityProvider;
import net.hasor.dataway.service.DatawayConfig;

DatawayConfig config = new DatawayConfig()
.identityProvider(new RequestIdentityProvider("host.identity"));

属性缺失或类型不符时返回匿名身份。完整配置见 Spring、Solon、Hasor。

自定义身份获取​

实现 IdentityProvider.resolve(WebRequest) 并通过 DatawayConfig.identityProvider(...) 注册,可从应用安全上下文获取身份。返回值须为非空 UserIdentity,未登录时返回 UserIdentity.anonymous(Map.of())。未配置提供者时使用 WebRequest 的身份,初始为匿名。