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-адрес не работал.