GWT& Spring Security:org.springframework.beans.factory.NoSuchBeanDefinitionException

时间:2015-10-04 16:47:21

标签: spring gwt javabeans

我跟随this tutorial以使用Spring Security保护我的GWT应用程序。

然而,把

<!-- Spring Security -->

<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>/app</url-pattern>
</filter-mapping>

<!-- END FILTERS -->

<!-- BEGIN Listeners -->

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- END Listeners -->

<context-param>
    <param-name>
        contextConfigLocation
    </param-name>
    <param-value>
        classpath:/**/spring-config.xml
    </param-value>
</context-param>

进入我的 web.xml 文件会导致org.springframework.beans.factory.NoSuchBeanDefinitionException异常。堆栈跟踪:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:660)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1157)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:280)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:962)
    at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:324)
    at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235)
    at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:199)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    ...

我不明白为什么我会得到这个例外 - 我错过了什么?

2 个答案:

答案 0 :(得分:0)

  

DelegatingFilterProxy是一个Spring Framework类,它委托给在应用程序上下文中定义为Spring bean的过滤器实现。在这种情况下,bean被命名为“springSecurityFilterChain”,它是由命名空间创建的内部基础结构bean,用于处理Web安全性。请注意,您不应自己使用此bean名称。将此添加到web.xml后,您就可以开始编辑应用程序上下文文件了。使用该元素配置Web安全服务。

你应该检查你的弹簧配置,依赖...

这里也是简单的Spring安全性的好例子 http://www.mkyong.com/spring-security/spring-security-hello-world-example/

答案 1 :(得分:0)

您是否在web.xml中定义了context-param?例如,

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath*:/META-INF/spring/applicationContext-security.xml
      classpath*:/META-INF/spring/applicationContext.xml
      classpath*:/META-INF/spring/applicationContext-gwt-dispatch.xml
    </param-value>
  </context-param>

在Spring应用程序上下文中,您必须声明一个Spring bean XML文件&#34; applicationContext-security.xml&#34;在这种情况下如下,

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:security="http://www.springframework.org/schema/security"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
  http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

  <context:property-placeholder location="classpath*:/META-INF/spring/gwtsecurity.properties" />

  <security:user-service id="userService">
    <security:user name="user" password="user" authorities="ROLE_USER" />
    <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
  </security:user-service>

  ...
  <alias name="filterChainProxy" alias="springSecurityFilterChain" />

  <bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
    <security:filter-chain-map path-type="ant">
      <security:filter-chain
        filters="securityContextFilter, logoutFilter, formLoginFilter, requestCacheFilter,
            servletApiFilter, rememberMeFilter, anonFilter, sessionMgmtFilter, exceptionTranslator, filterSecurityInterceptor"
        pattern="/**" />
    </security:filter-chain-map>
  </bean>
  <bean
  ...
  </bean>
  ...
</beans>

参考:https://github.com/dmartinpro/gwt-security/tree/master/gwt-security-sample