jeffwils / grails-spring-security-saml

Grails Spring Security SAML2.0 Plugin for Grails 3
8 stars 24 forks source link

Changes to service provider metadata block breaks in v3.1.2 #10

Closed nialloconnor closed 6 years ago

nialloconnor commented 6 years ago

In version 3.1.2 there was a change to how the metadata providers block was parsed in SpringSecuritySamlGrailsPlugin.groovy that breaks with the example config and the intention of the change isn't clear. The change suggests there is an extra layer of nesting.

conf.saml.metadata.providers.each { indivProv -> indivProv.each {k,v ->

And results in the following stack

groovy.lang.MissingMethodException: No signature of method: org.grails.plugin.springsecurity.saml.SpringSecuritySamlGrailsPlugin$_doWithSpring_closure1$_closure7$_closure21.doCall() is applicable for argument types: (java.util.LinkedHashMap$Entry) values: [customer=/tomcat/resources/scri-ingress-metadata.xml] Possible solutions: doCall(java.lang.Object, java.lang.Object), findAll(), findAll(), isCase(java.lang.Object), isCase(java.lang.Object) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:286) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:430) at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2030) at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1890) at org.codehaus.groovy.runtime.dgm$159.invoke(Unknown Source) at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274) at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) at org.grails.plugin.springsecurity.saml.SpringSecuritySamlGrailsPlugin$_doWithSpring_closure1$_closure7.doCall(SpringSecuritySamlGrailsPlugin.groovy:144)

jregistr commented 6 years ago

An example workaround for now for anyone googling this, is to provide a list of maps. E.g :

...metadata.providers: [[ping: '.....']]
irstevenson commented 6 years ago

I think it would be good to tidy this up. I've tentatively placed it for future version 3.3.1.

valentingoebel commented 6 years ago

Since our 3.3.0 update we have reverted to the unnested configuration.

application.groovy

...providers = [ping: 'file.xml']

application.yml

...providers:
    ping: 'file.xml'