2010-11-26 26 views
0

Ich baue gerade eine Grails 1.3.5 App. Es verwendet einen vorhandenen Model-Layer (shared code - no GORM) und ich habe die Tomcat-jndi-Verbindungen dafür in conf/spring/resources.xml erfolgreich konfiguriert und alles funktioniert gut. Ich habe jedoch Probleme, wenn ich Spring-Sicherheit versuche und konfiguriere. Ich benutze NICHT das Frühjahr Sicherheits-Plugin, weil ich die XML-Sicherheitskonfiguration von einem anderen Projekt, das wir bereits ausgeführt haben, verwenden möchte. Dies verwendet Spring 3-Sicherheit. Ich habe die folgenden Schritte auf verschiedenen Blogs gefolgt:Spring Security ohne das Plugin web.xml konfigurieren

  • Ran 'Grails install-Vorlagen'

Ich habe folgendes auf den templates/Krieg/web.xml:

<filter> 
    <filter-name>Spring Security Filter Chain Proxy</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>targetBeanName</param-name> 
     <param-value>filterChainProxy</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>Spring Security Filter Chain Proxy</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 
  • Ich habe meine Sicherheitsbohnen zum Verzeichnis conf/spring hinzugefügt und validiert.
  • Ich habe die Feder Sicherheitsglas Dateien in das Verzeichnis grails lib kopiert. Version 3.0.2

Wenn ich laufen 'Grails Lauf app' erhalte ich eine sehr seltsame Ausnahme mit der web.xml:

2010-11-26 12:16:02,512 INFO [startup.ContextConfig] No default web.xml 
2010-11-26 12:16:02,518 ERROR [digester.Digester] End event threw exception 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:585) 
    at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:925) 
... 
Caused by: java.lang.IllegalArgumentException: Filter mapping specifies an unknown filter name hiddenHttpMethod 
    at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2251) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:585) 
    at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:925) 
    at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:193) 
    at org.apache.tomcat.util.digester.Rule.end(Rule.java:229) 
    at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1140) 
    ... 437 more 

ich den Filter auch Code aus anderen Blogs kopiert haben, dass vorschlagen:

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Aber ich bekomme immer noch das gleiche Problem.

Hat jemand einen Ratschlag, was ich als nächstes versuchen sollte? Die nervige Sache ist, dass ich das alles mit einer älteren Version von Grails (1.1.1) mit Version 2 der Sicherheitsmodule hatte, aber jetzt bekomme ich Probleme.

+0

Übrigens habe ich es geschafft, die gleiche App mit Spring Security 2.0.4 arbeiten. Ich habe alles auf die gleiche Weise konfiguriert mit Ausnahme der etwas anderen Sicherheitsdefinitionen. Sicherheit v3 verwendet: org.springframework.web.filter.DelegatingFilterProxy, während v2 verwendet: org.springframework.security.util.FilterToBeanProxy. Ich komme über den obigen Fehler hinaus und bekomme 'Keine Bohne mit dem Namen' Spring Security Filter Chain Proxy 'definiert. Es ist in config/spring/definiert, aber nicht in web-app/WEB-INF/ApplicationContext.xml. Es scheint aber falsch zu sein, die Bean-Defs dort hinzustellen. – Matt

Antwort

1

Ich habe diese Arbeit eine Weile zurück, aber es hat eine andere Einstellung in 1.3 als was in 1.2 gearbeitet. Ich fand ich nur externe XML-Dateien zugreifen können, indem sie auf die contextConfigLocation context-param in web.xml hinzu:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/applicationContext.xml 
     /WEB-INF/applicationContext-security.xml 
    </param-value> 
</context-param> 

Anders als das die Konfiguration die gleiche wie für eine nicht-Grails App war. Sie benötigen wahrscheinlich auch das Config-Jar.

Anstatt Jars in Ihr lib-Verzeichnis zu kopieren, sollten Sie auch die IVy-Konfiguration in BuildConfig.groovy verwenden, so dass Sie nur eine Kopie jedes Jars auf Ihrem Rechner haben. Hier ist eine, die funktionieren sollte:

grails.project.class.dir = 'target/classes' 
grails.project.test.class.dir = 'target/test-classes' 
grails.project.test.reports.dir = 'target/test-reports' 

grails.project.dependency.resolution = { 

    inherits 'global' 
    log 'warn' 

    repositories { 
     grailsPlugins() 
     grailsHome() 
     grailsCentral() 
     ebr() // SpringSource http://www.springsource.com/repository 
    } 

    dependencies { 
     runtime('org.springframework.security:org.springframework.security.core:3.0.3.RELEASE') { 
     excludes 'com.springsource.org.aopalliance', 
        'com.springsource.org.apache.commons.logging', 
        'org.springframework.beans', 
        'org.springframework.context', 
        'org.springframework.core' 
     } 

     runtime('org.springframework.security:org.springframework.security.config:3.0.3.RELEASE') 

     runtime('org.springframework.security:org.springframework.security.web:3.0.3.RELEASE') { 
     excludes 'com.springsource.javax.servlet', 
        'com.springsource.org.aopalliance', 
        'com.springsource.org.apache.commons.logging', 
        'org.springframework.aop', 
        'org.springframework.beans', 
        'org.springframework.context', 
        'org.springframework.core', 
        'org.springframework.web' 
     } 
    } 
} 
+0

Danke. Das hat funktioniert. Ich installiere das Spring-Security-Core-Plugin, damit ich die Sicherheits-Tag-Bibliotheken bekomme. Ist dies der beste Weg, oder gibt es einen besseren Weg? – Matt

Verwandte Themen