Skip to content

授权策略与拦截

把「声明权限 → 引擎决策 → 返回错误」串成统一策略。拦截器按固定顺序短路,保证每种失败都有确定、可机读的错误码(application/problem+json)。

IamAuthorizationInterceptor 先解析注解(方法优先于类),随后:

  1. 无 principal → 401 IAM_UNAUTHENTICATED
  2. 无 resource resolver → 500 IAM_RESOURCE_RESOLUTION_UNAVAILABLE
  3. resolver 返回 empty → 404 IAM_RESOURCE_NOT_FOUND
  4. engine.allowed()==false403 IAM_ACCESS_DENIED
HTTP ProblemDetail code
401 IAM_UNAUTHENTICATED
403 IAM_ACCESS_DENIED
404 IAM_RESOURCE_NOT_FOUND
500 IAM_RESOURCE_RESOLUTION_UNAVAILABLE

ACCESS_DENIED 的具体原因由 AuthorizationDecision.decisionCode(如 SCOPE_DENIED)进一步说明。

https://github.com/wbh123/iam/blob/main/muer-spring-boot-autoconfigure/src/main/java/io/github/muer/autoconfigure/web/IamAuthorizationInterceptor.java

相关:见 authorization-enginerequire-permission