Grails:使用servlet过滤器时异常类名不正确

Grails:使用servlet过滤器时异常类名不正确,grails,servlet-filters,Grails,Servlet Filters,我已经创建了一个servlet过滤器,现在无论在哪里抛出异常,原因总是过滤器类。 我正在使用请求检索ErrorController中的异常类。异常 堆栈跟踪: java.lang.RuntimeException: 在my.MyController$\u closure4.doCall(MyController.groovy:68) ... 在my.MyFilter.doFilter(MyFilter.groovy:38) … 在java.lang.Thread.run(Thread.java

我已经创建了一个servlet过滤器,现在无论在哪里抛出异常,原因总是过滤器类。 我正在使用请求检索ErrorController中的异常类。异常 堆栈跟踪
java.lang.RuntimeException:
在my.MyController$\u closure4.doCall(MyController.groovy:68
...
在my.MyFilter.doFilter(MyFilter.groovy:38

在java.lang.Thread.run(Thread.java:745)
我无法了解异常的真正原因:/

那么为什么
request.exception.getClassName()
返回MyFilter而不是MyController

MyFilter:

@CompileStatic                 
类MyFilter实现过滤器{

UrlMappingsHolder grailsUrlMappingsHolder
MyService myService

@Override
void init(FilterConfig filterConfig) throws ServletException {

}

@Override
void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    String url = ((HttpServletRequest)servletRequest).getServletPath()
    def urlInfo = grailsUrlMappingsHolder.match(url).getParameters()
    if (!myService.controllersToNotCheck.contains(urlInfo.controller) && !myService.sourcesExist()) {
        throw new NoEnvironmentException()
    }
    filterChain.doFilter(servletRequest, servletResponse)
}

@Override
void destroy() {

}

}谢谢你们的帮助。 问题如下: Grails使用GrailsWrappedRuntimeException类包装异常; 这一个将解析stacktrace,并查找扩展名为.groovy的文件的最后一次出现。 MyFilter始终是stacktrace中的最后一个groovy类(如果从上到下读取),这就是为什么className始终是MyFilter,所以它隐藏了有关抛出异常的控制器或服务的信息。
我的解决方案很简单:我将过滤器重写为“MyFilter.java”:)

您是否检查了MyController.groovy?@VinayPrajapati中的第68行?问题不在抛出exeption的地方,而是在ErrorController中,所有错误都被重定向。当我处理这个异常时,代码request.exception.getClassName()总是返回“MyFilter”(在本例中不是“MyController”),实际上抛出的是哪个类的execption并不重要。请在异常上尝试getCause()?您能给我们看一下筛选代码吗?@majkelo刚刚添加了筛选代码