我正在尝试将基于 Oauth for Spring Security 的 Oauth2 客户端从普通 Java/Spring 移植到 Grails,但遇到了问题。问题的症结似乎在于 Spring Oauth 客户端实现的设计依赖于这样一个假设,即从 Oauth2RestTemplate 抛出的异常将被 OAuth2ClientContextFilter 的 catch 块捕获,从而允许过滤器发出重定向响应(向宣誓提供者发送授权请求)。
这在普通的 Java/Spring 中运行良好,但在 Grails 中,GrailsDispatcherServlet 被配置为通过 HandlerExceptionResolvers 处理所有异常。因此,在 Oauth2RestTemplate 中抛出的异常(在 Grails 控制器中调用)被 GrailsExceptionResolver 捕获,并且不会被 OAuth2ClientContextFilter 看到,从而破坏了所需的重定向行为。
我发现的所有关于定制 Grails 异常处理的讨论似乎都假设定制的目的是将异常映射到 HTTP 错误代码或错误页面视图。但是有什么方法可以告诉 Grails 简单地允许一个特定的异常通过未处理的流,以便它可以被 servlet 过滤器捕获?或者是否可以插入一个重新抛出异常而不是返回 ModelAndView 的自定义 HandlerExceptionResolver(正如对 HandlerExceptionResolver 的标准期望)?还是有其他更好的方法可以让 Oauth for Spring Security 客户端在 Grails 中工作?