Spring-Security и Spring-MVC конфигурация - PullRequest
1 голос
/ 22 января 2010

Я написал небольшое веб-приложение, использующее Spring-Security и Spring-MVC с конфигурацией на основе аннотаций (@Secured). чтобы выполнить эту работу, мне пришлось разделить конфигурацию Spring-Security:

app-context.xml (включен в ContextConfigLocation web.xml)

<security:http auto-config="true"/>

app-servlet.xml (диспетчер spring-mvc загружает это)

<security:global-method-security secured-annotations="enabled"/>

Почему я должен был разделить их? когда я помещаю всю конфигурацию безопасности в app-context.xml, аннотации @Secured, похоже, игнорируются, поэтому вам не нужно входить в систему для доступа к методам @Secured Controller.

Когда я помещаю все это в app-servlet.xml, возникает следующее исключение ...

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:504)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1041)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1008)
        at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:217)
        at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:145)
        at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:179)

Я не понимаю: /

Ответы [ 4 ]

4 голосов
/ 22 января 2010

В последнем случае элемент <security:http /> может не являться частью определенной схемы xml. Так что, скорее всего, получит исключение. Кстати, какое исключение?

В первом случае это не сработало. Это может быть потому, что Spring ищет этот элемент в конфигурации xml, загруженной DispatcherServlet, в противном случае игнорируйте его. Я тоже не уверен, но, похоже, это так. :)

Посмотрите на эту весеннюю ветку форума . Они обсуждают то же самое. Подводя итог, "bean-компоненты * -servlet.xml не видны из основного контекста" .

2 голосов
/ 22 января 2010

<security:http .../> должен быть объявлен в конфигурации configContextLocation. Он не может быть объявлен в ...-servlet.xml, потому что во время обработки запроса он должен быть доступен до идентификации целевого сервлета.

<security:global-method-security .../> (насколько я понимаю) регистрирует постпроцессор бина, который применяется к контексту, в котором он объявлен (т. Е. Когда он объявлен в xml configContextLocation, он применяется к бинам, объявленным там, но не для бобов, объявленных в ...-servlet.xml)

1 голос
/ 08 февраля 2011

В Деве основная конфигурация определяется как org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext
в файле web.xml, поэтому мне пришлось импортировать конфигурацию безопасности в applicationContext.xml вместо * -servlet.xml
<import resource="applicationContext-security.xml"/>
это исправило
No bean named 'springSecurityFilterChain' is defined

0 голосов
/ 22 января 2010

Вы должны иметь возможность иметь оба в одном XML, просто убедитесь, что схема объявлена ​​правильно. Я использовал их в одном файле в Spring 2.5 и Spring 3.

Когда вы говорите, что в обоих файлах это не работает, я предполагаю, что вы имеете в виду, что к вызовам вашего метода не применяется защита? Если это так, убедитесь, что ваше приложение загружает и использует эти классы через Spring, если нет, безопасность не будет применена. Например. если вы получаете доступ к классу как:

MyClass instance = new MyClass();
instance.doSomething();

если doSomething () помечен аннотациями безопасности, ничто не отреагирует на эту аннотацию. То же самое происходит, если вы используете его из сервлета, который не вводится через пружину и т. Д.

Если это не поможет, не могли бы вы прояснить свои проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...