代码之家  ›  专栏  ›  技术社区  ›  fasseg

springsecurity和springmvc配置

  •  1
  • fasseg  · 技术社区  · 16 年前

    我已经使用SpringSecurity和SpringMVC编写了一个小的webapp,它具有基于注释的配置(@Secured)。为了完成这项工作,我必须拆分spring安全配置:

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

    <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 回复  |  直到 16 年前
        1
  •  4
  •   Adeel Ansari    16 年前

    在后一种情况下, <security:http />

    在前一种情况下,它不起作用。可能是因为Spring在DispatcherServlet加载的xml配置中查找此元素,否则忽略它。我也不确定,但似乎是这样

    看看这个 spring forum thread . 他们正在讨论同样的问题。总而言之,, “在主上下文中,*-servlet.xml bean不可见” .

        2
  •  2
  •   axtavt    16 年前

    <security:http .../> 必须在 configContextLocation ...-servlet.xml

    <security:global-method-security .../> (据我所知)注册一个bean后处理器,它应用于声明它的上下文(即在 配置上下文位置 的xml,它将应用于其中声明的bean,但不应用于中声明的bean …-servlet.xml )

        3
  •  1
  •   Peter Hawkins    15 年前

    在处女座,主要的形态由 org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext
    在web.xml中,因此我必须将安全配置导入applicationContext.xml,而不是*-servlet.xml
    <import resource="applicationContext-security.xml"/>

    No bean named 'springSecurityFilterChain' is defined

        4
  •  0
  •   Tomas    16 年前

    您应该能够在一个XML中同时使用这两种模式,只要确保正确声明了模式即可。我在Spring2.5和Spring3的同一个文件中使用了它们。

    当您在两个文件中都说它不工作时,我假设您的意思是没有对您的方法调用应用安全性? 如果是这种情况,请确保应用程序通过spring加载并使用这些类,否则不会应用任何安全性。例如,如果您以以下方式访问类:

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

    如果doSomething()使用安全注释进行注释,则不会对该注释作出任何反应。如果您从servlet使用它而不是通过spring等注入,情况也是如此。

    推荐文章