Я разрабатываю плагин Grails, который имеет фильтр, с кодом вроде:
void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, javax.servlet.FilterChain chain) {
HttpServletRequest request = servletRequest
HttpServletResponse response = servletResponse
String url = request.requestURI.substring(request.contextPath.length())
logger.debug("Processing url: $url")
chain.doFilter(servletRequest, servletResponse)
}
довольно стандартный Java EE фильтр, который расширяет GenericFilterBean
пружины. И это зарегистрировано SpringSecurityUtils.registerFilter %NAME%, %POS%
(это расширение безопасности весны)
После обновления до Grails 2.0 у меня появляются странные ошибки в строке chain.doFilter()
:
No thread-bound request found: Are you referring to request attributes outside of
an actual web request, or processing a request outside of the originally receiving
thread? If you are actually operating within a web request and still receive this
message, your code is probably running outside of DispatcherServlet/DispatcherPortlet:
In this case, use RequestContextListener or RequestContextFilter to expose the
current request.
Обратите внимание, что все нормально в String url = request.requestURI.....
строке. И отображаемый URL действителен.
Проблема в том, что эта ошибка непредсказуема :( иногда фильтр работает нормально, иногда выдает исключение, и я не могу понять, в чем проблема, и что я должен сделать, чтобы ее исправить. Возможно, это зависит от порядка инициализации компонента, но я не уверен
Обновление : обнаружено, что это из-за плагина resources
. Ошибка исчезла после удаления этого плагина. Не уверен, что это лучший способ.