2015-10-04 58 views
1

我跟随this tutorial来保护我的GWT应用程序与Spring安全。GWT和Spring安全:org.springframework.beans.factory.NoSuchBeanDefinitionException

然而,把

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

我不明白为什么我得到这个异常 - 我错过了什么?

回答

0

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

您应该检查你的Spring配置,依赖...

而且,这里是 http://www.mkyong.com/spring-security/spring-security-hello-world-example/

0

有你在web.xml中定义的context-param简单的Spring安全的好榜样?对于例如,

<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文件 “的applicationContext-security.xml文件”,在下面这种情况下,

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

+0

嗨!嗯..但你在哪里实际声明'springSecurityFilterChain'? – displayname

+0

这是filterChainProxy的别名,答案已更新。 – kolunar

+0

嗨!对不起,迟到的答案,但我很忙,不能继续这一点,直到现在。那么,我真的没有得到这个。您发布的链接在哪里声明了它的FilterChainProxy,以及我发布的示例在哪里做了?而我不能只是改变'filterChainProxy'到'springSecurityFilterChain'? – displayname