自定义错误处理
默认授权拦截会抛出 AuthorizationDeniedException 等,由 Spring 转换为 application/problem+json 响应。应用常需把这些失败码映射成自己的业务错误体,或补充本地化文案。
- 拦截决策顺序(
IamAuthorizationInterceptor,真实):先取 method 注解,否则取 class 注解(Method 优先于 Class),随后:- 无 principal →
401 UNAUTHENTICATED - 无 resource resolver →
500 RESOURCE_RESOLUTION_UNAVAILABLE - resolver 返回 empty →
404 RESOURCE_NOT_FOUND engine.allowed()==false→403 ACCESS_DENIED
- 无 principal →
- 默认 MVC 失败 code(ProblemDetail):
401=IAM_UNAUTHENTICATED、403=IAM_ACCESS_DENIED、404=IAM_RESOURCE_NOT_FOUND、500=IAM_RESOURCE_RESOLUTION_UNAVAILABLE。 - 拒绝由
AuthorizationEngine.require(...)抛出AuthorizationDeniedException(decide返回AuthorizationDecision)。
拦截器默认响应头 Content-Type: application/problem+json,体如:
{ "status": 403, "code": "IAM_ACCESS_DENIED", "detail": "scope denied" }自定义 @ControllerAdvice 可捕获 AuthorizationDeniedException 改写响应。
IamAuthorizationInterceptor:https://github.com/wbh123/iam/blob/main/muer-spring-boot-autoconfigure/src/main/java/io/github/muer/autoconfigure/web/AuthorizationEngine:https://github.com/wbh123/iam/blob/main/muer-authorization/src/main/java/io/github/muer/authorization/
当前版本:0.1.0-SNAPSHOT(Release Candidate),尚未发布。