2010-11-26 5 views
0

Je suis en train de créer une application Grails 1.3.5. Il utilise une couche de modèle existante (code partagé - pas de GORM) et j'ai configuré avec succès les connexions tomcat jndi dans conf/spring/resources.xml et tout fonctionne bien. Cependant, j'ai des problèmes quand j'essaie de configurer la sécurité de Spring. Je n'utilise pas le plugin de sécurité de printemps car je veux utiliser la configuration de sécurité xml d'un autre projet que nous avons déjà lancé. Cela utilise la sécurité de Spring 3. J'ai suivi les étapes suivantes sur divers blogs:Configuration de Spring Security sans les problèmes de plugin web.xml

  • Ran Grails install-templates '

j'ajouté ce qui suit à la templates/guerre/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> 
  • J'ai ajouté mes beans de sécurité au répertoire conf/spring et les ai validés par .
  • J'ai copié le fichier de sécurité de printemps sur le répertoire de grails. Version 3.0.2

Quand je lance 'Grails gestion app' Je reçois une exception très étrange avec le 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 

J'ai aussi copié le code de filtre d'autres blogs suggérer:

<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> 

Mais je reçois toujours le même problème.

Quelqu'un a-t-il des conseils sur ce que je devrais essayer ensuite? Ce qui m'ennuie, c'est que tout cela a fonctionné sur une ancienne version de Grails (1.1.1) avec la version 2 des modules de sécurité mais maintenant j'ai des problèmes.

+0

En passant, j'ai réussi à faire fonctionner la même application en utilisant Spring Security 2.0.4. J'ai tout configuré de la même manière à l'exception des définitions de bean de sécurité légèrement différentes. Security v3 utilise: org.springframework.web.filter.DelegatingFilterProxy alors que v2 utilise: org.springframework.security.util.FilterToBeanProxy. Je passe l'erreur ci-dessus et j'obtiens 'Aucun bean nommé' Spring Security Filter Chain Proxy 'est défini'. C'est défini dans config/spring/mais pas dans web-app/WEB-INF/ApplicationContext.xml. Semble mal d'y mettre des fèves. – Matt

Répondre

1

Je l'ai eu à travailler il y a un moment, mais il a fallu une configuration différente en 1.3 que ce qui fonctionnait en 1.2. J'ai trouvé que je ne pouvais accéder à des fichiers XML externes en les ajoutant au contextConfigLocation contexte dans web.xml param:

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

Autre que la configuration était la même que pour une application non-Grails. Vous avez probablement aussi besoin du pot de config. De plus, plutôt que de copier des fichiers jars dans votre répertoire lib, vous devez utiliser la configuration IVy dans BuildConfig.groovy pour ne disposer que d'une copie de chaque fichier jar sur votre machine. En voici un qui devrait fonctionner:

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

Merci. Ça a marché. J'installe le plugin spring-security-core pour que j'obtienne les librairies d'étiquettes de sécurité. Est-ce la meilleure façon de le faire ou existe-t-il un meilleur moyen? – Matt

Questions connexes