Grails:使用servlet过滤器时异常类名不正确
我已经创建了一个servlet过滤器,现在无论在哪里抛出异常,原因总是过滤器类。 我正在使用请求检索ErrorController中的异常类。异常 堆栈跟踪: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
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刚刚添加了筛选代码