Настройка Spring Security без проблем с плагином web.xml - PullRequest
0 голосов
/ 26 ноября 2010

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

  • Запустил 'grails install-templates'

Я добавил следующее в шаблоны / war / 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 run-app', я получаю очень странное исключение с 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 модулей безопасности, но теперь у меня проблемы.

1 Ответ

1 голос
/ 27 ноября 2010

Некоторое время назад я работал, но в 1.3 потребовалась другая настройка, чем в 1.2. Я обнаружил, что могу получить доступ только к внешним XML-файлам, добавив их в context-param 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. Вам, вероятно, также нужен конфигурационный jar.

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

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'
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...