2012-06-26 36 views
0

我在配置我的Web應用程序以在處女座Tomcat服務器上使用Spring安全性時遇到問題。 我正在使用基於註釋的配置 - 並且希望在可能的情況下使用註釋。如何配置Spring安全性以處理處女座 - 使用註釋?

下面顯示包含錯誤消息的日誌。

[2012-06-26 16:19:30.661] ERROR start-signalling-1   o.a.catalina.core.ContainerBase.[Catalina].[localhost].[/virgo] Exception starting filter securityFilter org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079) 
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) 
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277) 
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) 
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382) 
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103) 
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4638) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5294) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 
at org.eclipse.gemini.web.tomcat.internal.TomcatServletContainer.startWebApplication(TomcatServletContainer.java:122) 
at org.eclipse.gemini.web.internal.StandardWebApplication.start(StandardWebApplication.java:91) 
at org.eclipse.virgo.web.core.internal.WebBundleLifecycleListener.onStarted(WebBundleLifecycleListener.java:122) 
at org.eclipse.virgo.kernel.install.artifact.internal.StandardArtifactStateMonitor.onStarted(StandardArtifactStateMonitor.java:247) 
at org.eclipse.virgo.kernel.install.artifact.internal.AbstractInstallArtifact.asyncStartSucceeded(AbstractInstallArtifact.java:294) 
at org.eclipse.virgo.kernel.install.artifact.internal.AbstractInstallArtifact.access$0(AbstractInstallArtifact.java:291) 
at org.eclipse.virgo.kernel.install.artifact.internal.AbstractInstallArtifact$StateMonitorSignal.signalSuccessfulCompletion(AbstractInstallArtifact.java:229) 
at org.eclipse.virgo.kernel.core.internal.BundleStartTracker$1.run(BundleStartTracker.java:143) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 

我的web.xml文件如下

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<!-- Java-based Spring container definition --> 

<context-param> 
    <param-name>contextClass</param-name> 
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
</context-param> 

<!-- Location of Java @Configuration classes that configure the components 
    that makeup this application --> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>org.TSSG.social.statusnet.config</param-value> 
</context-param> 

<!-- Creates the Spring Container shared by all Servlets and Filters --> 

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

<!-- Processes application requests --> 
<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<!-- Secures the application --> 

<filter> 
    <filter-name>securityFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 

    <init-param> 
     <param-name>targetBeanName</param-name> 
     <param-value>springSecurityFilterChain</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>securityFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 


<!-- Enables support for DELETE and PUT request methods with web browser 
    clients --> 

<filter> 
    <filter-name>hiddenHttpMethodFilter</filter-name> 
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>hiddenHttpMethodFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

的@Configuration類給我找麻煩包含以下代碼

package org.TSSG.social.statusnet.config; 
--imports removed --- 
@Configuration 
@ImportResource("classpath:org/TSSG/social/statusnet/config/security.xml") 
public class SecurityConfig { 

@Bean 
public PasswordEncoder passwordEncoder() { 
    return NoOpPasswordEncoder.getInstance(); 
} 

@Bean 
public TextEncryptor textEncryptor() { 
    return Encryptors.noOpText(); 
} 

}

而且最後,我的ecurity.xml包含以下內容。

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

<http use-expressions="true"> 
    <!-- Authentication policy --> 
    <form-login login-page="/signin" login-processing-url="/signin/authenticate" /> 
    <logout logout-url="/signout" delete-cookies="JSESSIONID" /> 
    <intercept-url pattern="/favicon.ico" access="permitAll" /> 
    <intercept-url pattern="/resources/**" access="permitAll" /> 
    <intercept-url pattern="/signin/**" access="permitAll" /> 
    <intercept-url pattern="/signup/**" access="permitAll" /> 
    <intercept-url pattern="/**" access="isAuthenticated()" /> 
</http> 

<authentication-manager alias="authenticationManager"> 
    <authentication-provider> 
     <password-encoder ref="passwordEncoder" /> 
     <jdbc-user-service data-source-ref="dataSource" 
          users-by-username-query="select username, password, true from Account where username = ?" 
          authorities-by-username-query="select username, 'ROLE_USER' from Account where username = ?"/> 
    </authentication-provider> 
</authentication-manager> 

只需添加一個快速的注意,我的應用程序可以完美運行在Apache Tomcat。

回答

0

在審查我的構建(使用maven)後。我有錯誤的目錄結構,因此WEB-INF/lib沒有正確地獲取依賴關係。

問題現在已經解決並正常工作!