簡體   English   中英

spring-security和spring-mvc配置

[英]spring-security & spring-mvc configuration

我已經使用spring-security和spring-mvc編寫了一個基於注釋的配置(@Secured)的小型webapp。 為了完成這項工作,我不得不拆分spring-security配置:

app-context.xml(包含在web.xml的ContextConfigLocation中)

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

app-servlet.xml(spring-mvc的dispatcherservlet加載了此內容)

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

我不明白:/

在后一種情況下, <security:http />元素可能不是所定義的xml模式的一部分。 因此,它可能會出現異常。 順便說一句,什么例外?

在前一種情況下,它不起作用。 可能是因為Spring在DispatcherServlet加載的xml配置中尋找此元素,否則將其忽略。 我也不確定,但似乎是這樣。 :)

看看這個春季論壇的話題 他們正在討論相同的問題。 概括起來, “ * -servlet.xml bean在主上下文中不可見”

<security:http .../>必須在configContextLocation的配置中聲明。 它無法在...-servlet.xml聲明,因為在請求處理期間,它應該在標識目標servlet之前可用。

<security:global-method-security .../> (據我所知)注冊了一個bean后處理器,該后處理器應用於聲明它的上下文(即,在configContextLocation的xml中聲明時,它應用於在此聲明的bean,但不在...-servlet.xml聲明的bean)

在處女座中,主要配置由org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext定義
在web.xml中,因此我必須將安全配置導入到applicationContext.xml中,而不是* -servlet.xml中。
<import resource="applicationContext-security.xml"/>
固定了
No bean named 'springSecurityFilterChain' is defined

您應該能夠在一個XML中同時擁有兩者,只需確保正確聲明了架構即可。 我在Spring 2.5和Spring 3中在同一文件中使用了它們。

當您在兩個文件中都說它不起作用時,我假設您是說沒有安全性應用於方法調用? 如果是這種情況,請確保您的應用程序通過spring加載並使用這些類,否則將不會應用任何安全性。 例如,如果您以以下方式訪問課程:

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

如果doSomething()帶有安全注釋,則對該注釋沒有任何反應。 如果您不是通過spring等方式從servlet中使用它,也是如此。

如果這沒有幫助,您能否澄清問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM