2012-08-25 1 views
41

Ich lerne Frühling Sicherheit aus Referenzmaterial. Release 3.1.2.RELEASE. Wie in angegeben, dass ich security:http Tag wie diesembekommen Ausnahme: Keine Bohne mit dem Namen 'SpringSecurityFilterChain' ist definiert

sicherheits context.xml

<security:http auto-config="true"> 
     <security:intercept-url pattern="/**" access="ROLE_USER"/> 
    </security:http> 

web.xml

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

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

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

    <servlet> 
    <servlet-name>security</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

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

sicherheits servlet.xml

konfiguriert haben
<context:component-scan base-package="com.pokuri.security.mvc.controllers"/> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
     <property name="prefix" value="/WEB-INF/page/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

Aber ich bekomme diese Ausnahme, wenn ich die Anwendung starte. Wenn ich Sicherheitskonfiguration entferne, funktioniert meine Federweb-Anwendung gut. Ich habe die gleichen Fragen im Stackoverflow gestellt. Aber kein Glück.

+0

Fügen Sie sie dem 'root-Anwendungskontext' oder' DispatcherServlet-Anwendungskontext' hinzu. Sie können dies leicht tun, indem Sie 'AbstractAnnotationConfigDispatcherServletInitializer' erweitern. – smwikipedia

Antwort

62

Ich denke, dass der Grund für Ihr Problem darin liegen kann, dass Ihre XML-Konfigurationsdatei für Spring Security nicht geladen wird, wenn Sie Ihre Web-App starten.

dies beheben Sie alle Ihre XML-Konfigurationsdateien in web.xml wie die angeben sollten:

Dateien in Classpath (Unterordner nicht WEB-INF-Ordner oder es ist) Sie
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml</param-value> 
</context-param> 

Wenn Sie Ihre Konfiguration kann dann Spezifiziere die Liste der Konfigurationsdateien auf diese Weise;

... 
<param-value> 
    classpath:applicationContext.xml, 
    classpath:spitter-security.xml 
</param-value> 
... 

Und auch benötigen Sie spezielle Hörer hinzuzufügen, die Ihre Konfigurationsdateien geladen werden:

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

aber ich habe context-Parameter und Listener-Konfiguration in web.xml – Pokuri

+0

ja das ist das Problem mit meinem Kontext-Parameter. Ich habe den Parameterwert als classpath *: * - context.xml angegeben, was nicht korrekt ist, um security-context.xml zu übernehmen. Also Platzhalter in Klassenpfad geändert: **/* - context.xml. Jetzt funktioniert alles einwandfrei – Pokuri

+2

Hinweis: Ich musste es zum Stammanwendungskontext hinzufügen (nicht zum App-Servlet-Kontext). –

3

diese web.xml hinzufügen

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/root-context.xml, /WEB-INF/spring-security.xml</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> 

     <!-- filter declaration for 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>/*</url-pattern> 
</filter-mapping> 
10

ich nur die Bohne Definition in application hinzugefügt .xml als Frühling gefragt:

<bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"/>