«Нет привязанного к потоку запроса» в фильтре под Grails 2.0 - PullRequest
1 голос
/ 15 января 2012

Я разрабатываю плагин 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. Ошибка исчезла после удаления этого плагина. Не уверен, что это лучший способ.

1 Ответ

1 голос
/ 15 января 2012

в Grails 2.0 плагин webxml по умолчанию устанавливается в новых проектах. Он контролирует порядок фильтров в web.xml. http://grails.org/plugin/webxml

...