Ошибка Grails No thread-bound request не найдена?

grails #spring-security #saml #grails-2.2

#grails #spring-security #saml #grails-2.2

Вопрос:

Следуя руководству spring securty и saml plugin, я создал простое приложение.

Вот ссылки на руководство, которому я следовал, чтобы создать простое приложение hello world.

http://grails-plugins.github.io/grails-spring-security-core/2.0.x/guide/tutorials.html

https://www.wave-access.com/public_en/blog/2014/june/23/how-we-configured-saml-20-on-grails.aspx

Наконец-то я смог настроить плагин saml для настройки.

Теперь приложение запускается, но выдает ошибку 500 во время выполнения, как показано ниже.

Я некоторое время осматривался и не нашел никакого полезного решения. Приложение и плагины оба старые, потому что я должен использовать grails 2.2.

Я использую grails 2.2.

Я ценю любую информацию о том, что вызывает это исключение, связанное с запросом, не связанным с потоком.

Для вашей справки я опубликовал код в github

https://github.com/learningcscience/saml

Спасибо!

 |Loading Grails 2.2.0
No mavenInfo file found.
|Configuring classpath
.
|Environment set to development
.................................
|Packaging Grails application
....
|Compiling 1 source files
.............
|Running Grails application

Configuring Spring Security Core ...
... finished configuring Spring Security Core

Configuring Spring Security SAML ...
Registering metadata key: ping and value: security/idp-local.xml
...finished configuring Spring Security SAML
|Server running. Browse to http://localhost:8080/bookstore
Error |
2021-09-19 12:47:23,330 [http-bio-8080-exec-3] ERROR [/bookstore].[gsp]  - Servlet.service() for servlet [gsp] in context with path [/bookstore] threw exception
Message: 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.
    Line | Method
->> 1152 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    622 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    748 | run . . . in java.lang.Thread

Error |
2021-09-19 12:47:24,146 [http-bio-8080-exec-2] ERROR [/bookstore].[default]  - Servlet.service() for servlet [default] in context with path [/bookstore] threw exception
Message: 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.
    Line | Method
->> 1152 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    622 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    748 | run . . . in java.lang.Thread
 

Ответ №1:

После беглого просмотра вашей конфигурации, похоже, вы не выполнили шаг 3 вашего руководства по SAML на GRAILS:

3. Настройки менеджера ключей

  • [….]
  • Загрузите и сохраните sp.xml в папке grails-app/conf/security/. Копировать ipd.xml , который мы сгенерировали в конфигурации сервера OpenAM, в той же папке. Добавьте настройки sp и idp в Config.groovy:
 grails.plugins.springsecurity.saml.metadata.sp.file = 'security/sp.xml'
        grails.plugins.springsecurity.saml.metadata.providers = [idp: 'security/idp.xml']
        grails.plugins.springsecurity.saml.metadata.defaultIdp = 'idp'
        grails.plugins.springsecurity.saml.metadata.sp.defaults = [
            local: true,
            alias: 'localSp',
            securityProfile: 'metaiop',
            signingKey: 'apollo',
            encryptionKey: 'apollo',
            requireArtifactResolveSigned: true,
            requireLogoutRequestSigned: true,
            requireLogoutResponseSigned: true
        ]
 

Обратите внимание, что в руководстве написано «Копировать ipd.xml «, что, вероятно, является опечаткой. Должно ли это быть idp.xml вместо этого?

Комментарии:

1. Кстати, есть ли у вас ограничения, которые мешают вам использовать более новые версии GRAILS? (2.2.x в настоящее время устарел). Не поймите меня неправильно, у меня все еще есть пара проектов GRAILS 2.x самостоятельно. Просто интересно, почему бы не использовать хотя бы последнюю версию серии 2.x (а именно GRAILS 2.5.6)

2. спасибо rchfox. я попробую ваше предложение сегодня. прямо сейчас мы застряли с grails 2.2 из-за нехватки места и ресурсов. также нет времени на обновление, которое заняло бы много времени. Спасибо! скоро будет обновление.

3. хорошо, я только что добавил недостающие конфигурации, и все равно он выдает ОШИБКУ 2021-09-20 10:40:00,910 [http-bio-8080-exec-3] [/ bookstore].[gsp] — Servlet.service() для сервлета [gsp] в контексте с path [/bookstore] выдал сообщение об исключении: Запрос, связанный с потоком, не найден: вы ссылаетесь на атрибуты запроса вне фактического веб-запроса или обрабатываете запрос вне первоначально принимающего потока?

4. кстати, я намеренно оставил эти недостающие шаги, потому что перед этим в нем написано Запустить приложение. Существует пользовательский интерфейс, доступный в качестве контроллера метаданных localhost: 8080/MyApp/metadata ). И URL-адрес не работал.