2010-11-26 19 views
0

現在、Grails 1.3.5アプリケーションをビルドしています。既存のモデル層(共有コード - GORMなし)を使用し、conf/spring/resources.xml内のtomcat jndi接続を正常に設定しました。すべて正常に動作しています。しかし、Springのセキュリティを設定しようとすると問題が発生します。私は既に実行している別のプロジェクトのXMLセキュリティ設定を使用したいので、私は春のセキュリティプラグインを使用していません。これはSpring 3のセキュリティを使用します。私は、テンプレート/戦争/ web.xmlに以下を追加プラグインなしでSpring Securityを設定するweb.xmlの問題

  • 蘭 'Grailsのインストール・テンプレート'

<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> 
私は様々なブログで次の手順に従ってきました
  • conf/springディレクトリに自分のセキュリティBeanを追加し、 を検証しました。
  • 私は、灰色の ディレクトリに、春のセキュリティジャー ファイルをコピーしました。

私は実行バージョン3.0.2「Grailsのアプリを実行して」私は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 

私も他のブログからのフィルタコードをコピーしたものを提案:

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

しかし、私はまだ同じ問題を抱えています。

私は次に何を試してみるべきだとアドバイスしていますか?厄介なのは、バージョン2のセキュリティモジュールで古いバージョンのGrails(1.1.1)を使っていたことですが、今は問題が発生しています。

+0

ところで、私はSpring Security 2.0.4を使って同じアプリケーションを動かすことができました。わずかに異なるセキュリティBean定義を除いて、すべて同じ方法で設定しました。セキュリティv3では、org.springframework.web.filter.DelegatingFilterProxyが使用されますが、v2ではorg.springframework.security.util.FilterToBeanProxyが使用されます。上記のエラーが発生し、「Spring Security Filter Chain Proxyが定義されていません」というBeanが定義されていません。 config/spring /で定義されていますが、web-app/WEB-INF/ApplicationContext.xmlでは定義されていません。しかし、そこに豆のデフを入れるのは間違っているようだ。 – Matt

答えて

1

私はこの作業をしばらくやり直しましたが、1.3では1.2で動作したものとは異なる設定になりました。

の構成は、非Grailsのアプリと同じであったこと以外は
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/applicationContext.xml 
     /WEB-INF/applicationContext-security.xml 
    </param-value> 
</context-param> 

:私は、私が唯一のweb.xmlにcontextConfigLocationコンテキスト-PARAMにそれらを追加することにより、外部のXMLファイルにアクセスすることができました。おそらくconfig jarも必要です。

また、libディレクトリにjarファイルをコピーするのではなく、BuildConfig.groovyでIVy設定を使用すると、マシン上に各jarファイルのコピーが1つしか存在しません。

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

ありがとうございます。それはうまくいった。私はセキュリティタグlibsを得るためにspring-security-coreプラグインをインストールしています。これを行うにはこれが最善の方法ですか、より良い方法がありますか? – Matt

関連する問題