2017-01-07 3 views
1

Я создал новое приложение Grails 3.2.4. Я создал некоторые объекты домена, контроллеры и службы, а затем получил приложение для компиляции и запуска. Затем я добавил следующую строку в мой build.gradle.Приложение Grails 3.2.4 не загружается после добавления Spring Security Plugin 3.1.1

dependencies { 
     ... 
     compile "org.grails.plugins:spring-security-core:3.1.1" 
     ... 
    } 

я побежал следующую команду, как указано в the plugin docs.

grails s2-quickstart --uiOnly 

я уже пользователь, роль и классы UserRole определены, которые я указал в application.groovy, что эта команда сгенерирована, а также определение:

grails.plugin.springsecurity.active = true 

Я также добавил несколько использований тега <sec:ifNotGranted> к некоторым из моих взглядов.

Насколько я могу судить по документам, я не должен был ничего делать. Свойства Spring Security должны иметь значения по умолчанию, определенные в файле DefaultSecurityConfig.groovy, предоставленном плагином, в соответствии с документами, приведенными выше. Однако приложение даже не запускается. Первая ошибка, что я получил:

groovy.lang.MissingMethodException: No signature of method: static grails.plugin.springsecurity.SpringSecurityUtils.findFilterChainNames() is applicable for argument types: (org.grails.config.NavigableMap$NullSafeNavigator, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, groovy.util.ConfigObject) values: [[:], false, false, false, false, false, [:]] 
Possible solutions: findFilterChainNames(java.lang.Object, boolean, boolean, boolean, boolean, boolean, boolean) 
    at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1503) 
    at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1489) 
    at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:53) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at grails.plugin.springsecurity.ReflectionUtils.findFilterChainNames(ReflectionUtils.groovy:214) 

Я посмотрел в the code where findFilterChainNames is called, и проблема в том, что есть некоторые свойства, которые должны иметь значения булевы по умолчанию либо истинным или ложным (в соответствии с приведенными выше документы), но вместо этого они вообще не определены, в результате чего здесь отображается ошибка. Я подтвердил, что если я сам определяю эти свойства в application.groovy, эта ошибка идет. Однако он заменяется другой ошибкой для следующего неопределенного свойства, с которым запускается код Spring Security, и т. Д. Для каждого свойства, которое я пытаюсь определить сам, хотя мне и не нужно, согласно документам.

Я прошел через the code where the default values from DefaultSecurityConfig.groovy should be merged into the values defined in the application.groovy. Однако, когда DefaultSecurityConfig загружается из пути к классам и анализируется, свойства, которые я вижу в файле, не попадают в возвращаемую конфигурационную карту.

Я не могу понять, что я делаю неправильно, следуя инструкциям в документации. Я пытался искать похожие проблемы в Интернете, но ничего не мог найти. Кто-нибудь есть идеи или кто-то еще сталкивается с этим?

+0

лично никогда не пробовал --uiOnly 'grails s2-quickstart com.yourapp User Role' попробуйте, чтобы увидеть, изменит ли он поведение в любом случае. http://grails-plugins.github.io/grails-spring-security-core/v3/index.html#s2-quickstart Ваш метод действительно не так много документов на нем с этой страницы в любом случае – Vahid

+0

К сожалению, никаких изменений в поведении: – Schmick

ответ

0

Whelp, я понял. Я делал шаг дальше в код, который должен объединять свойства из предоставленного DefaultSecurityConfig, и я заметил, что: а) когда он перешагивал файл DefaultSecurityConfig, точки останова не выстраивались вместе с кодом и b) некоторые возвращаемые свойства имел старый префикс grails.plugins вместо нового префикса grails.plugin. Это вызвало у меня подозрение, что какая-то старая версия DefaultSecurityConfig (и, возможно, других классных классов) втягивается вместо правильных версий. Таким образом, я опустошил файлы ~/.grails, ~/.gradle и ~/.m2 всех кэшированных банок и классов. После этого мое приложение, похоже, правильно инициализирует Spring Security (он не работает из-за невозможности найти компонент, который я настроил Spring Security для использования в качестве обработчика выхода из системы, и я не уверен, почему, но это кажется несвязанным к этому вопросу).

0

Я использую grails 3.2.8 и после настройки ldap безопасности Spring, проверка подлинности на основе форм работала нормально.

Однако, когда я переключился на базовую аутентификацию, у меня была такая же ошибка. Я использовал файл application.properties для настройки реквизита для ldap и установки базовой аутентификации в true.

grails.plugin.springsecurity.useBasicAuth = true 

Добавлено в application.yml и все работало с файлом.