基于ForgeRock IG实现全局统一错误处理机制的技术问询
ForgeRock Identity Gateway (IG) 统一错误处理实现方案
我正在使用ForgeRock Identity Gateway(IG),目标是通过自定义CommonErrorHandler实现全路由的统一错误处理机制,要求捕获所有路由中的错误/异常(包括测试时主动抛出的异常),由中央处理器根据HTTP状态码映射errors.json中定义的自定义错误响应。目前已完成以下内容:
- 基于ScriptableHandler(Groovy)实现CommonErrorHandler
- 完成HTTP状态码与自定义错误码/消息映射的
errors.json文件 - 配置全局路由捕获所有异常并委托给CommonErrorHandler
全局路由配置
{ "handler": "ClientHandler", "auditService": "AuditService", "baseURI": "&{<MASKED_BACKEND_BASE_URL>}", "condition": "${matchesWithRegex(request.uri.path, '^/.*')}", "monitor": false }
CommonErrorHandler配置
{ "name": "CommonErrorHandler", "type": "ScriptableHandler", "config": { "type": "application/x-groovy", "file": "systemhandlers/CommonErrorHandler.groovy" } }
CommonErrorHandler Groovy脚本
import utils.ANZErrorMessages import org.slf4j.LoggerFactory def logger = LoggerFactory.getLogger("CommonErrorHandler") logger.info("Entering CommonErrorHandler") /* * 解析HTTP状态码 * 如果在响应创建前发生异常,默认返回500 */ def status = response?.status ?: 500 logger.info("解析到状态码 = {}", status) /* * 从errors.json中查找对应错误定义 */ def err = ANZErrorMessages.get(status) logger.info("映射到错误信息 = {}", err) /* * 无匹配映射时的降级处理 */ if (err == null) { err = [ code: "GENERIC_ERROR", message: "发生意外错误" ] } return [ status : status, headers: [ "Content-Type": ["application/json"] ], entity : [ code : err.code, message: err.message ] ]
内容的提问来源于stack exchange,提问作者Vidhi
相关产品推荐
相关产品推荐

