2010-11-26 2 views
0

В настоящее время я создаю приложение Grails 1.3.5. Он использует существующий уровень модели (общий код - нет GORM), и я успешно сконфигурировал подключения tomcat jndi для него в conf/spring/resources.xml, и все работает хорошо. Однако у меня возникают проблемы, когда я пытаюсь настроить Spring security. Я НЕ использую плагин весны безопасности, потому что я хочу использовать конфигурацию безопасности xml из другого проекта, который у нас уже запущен. Это использует безопасность Spring 3. Я следовал следующие шаги на различных блогах:Настройка Spring Security без проблем с plugin web.xml

  • RAN 'Grails установки-шаблоны'

Я добавил следующее в шаблоны/войны/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> 
  • Я добавил свои бобы безопасности в каталог conf/spring и получил .
  • Я скопировал весеннюю банку безопасности файлы к grails lib . Версия 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> 

Но у меня по-прежнему возникают те же проблемы.

Есть ли у кого-нибудь советы о том, что я должен попробовать дальше? Досадно, что я все это работал над более старой версией Grails (1.1.1) с версией 2 модулей безопасности, но теперь у меня возникают проблемы.

+0

Кстати, мне удалось получить то же самое приложение, используя Spring Security 2.0.4. Я настроил все одинаково, за исключением немного разных определений компонентов безопасности. Безопасность v3 использует: org.springframework.web.filter.DelegatingFilterProxy, тогда как v2 использует: org.springframework.security.util.FilterToBeanProxy. Я пропустил вышеуказанную ошибку и получил «Нет bean с именем« Spring Security Filter Chain Proxy ». Он определен в config/spring /, но не в веб-приложении/WEB-INF/ApplicationContext.xml. Кажется, неправильно помещать bean defs там. – Matt 2010-11-26 15:48:54

ответ

1

Я получил эту работу некоторое время назад, но в 1.3 она изменилась, чем в 1.2. Я нашел, что я мог бы получить доступ только внешние файлы XML, добавляя их к contextConfigLocation контекстного парам в web.xml:

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

Кроме этого конфигурация была такой же, как для не-Grails приложения. Вероятно, вам также понадобится конфиг.

Кроме того, вместо копирования контейнеров в каталог lib вы должны использовать конфигурацию IVy в BuildConfig.groovy, чтобы на вашем компьютере была только одна копия каждой банки. Вот один из них, который должен работать:

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

Спасибо. Это сработало. Я устанавливаю плагин spring-security-core, чтобы получить теги безопасности. Это лучший способ сделать это или есть лучший способ? – Matt 2010-11-29 10:13:57

Смежные вопросы