web-dev-qa-db-fra.com

exception à obtenir: aucun haricot nommé 'springSecurityFilterChain' n'est défini

J'apprends la sécurité de printemps à partir de documents de référence. version 3.1.2.RELEASE. Comme indiqué dans ce que j'ai configuré security:http tag comme ça

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

security-servlet.xml

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

Mais je reçois cette exception lorsque je lance l'application. Si je supprime la configuration de sécurité, mon application Web Spring fonctionne correctement. Je suis passé par le même genre de questions dans stackoverflow. Mais pas de chance.

45
Pokuri

Je pense que la raison de votre problème peut être que votre fichier de configuration XML pour la sécurité de printemps n'est pas chargé lorsque vous démarrez votre application Web.

Pour résoudre ce problème, vous devez spécifier tous vos fichiers de configuration XML dans web.xml comme ceci:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml</param-value>
</context-param>

Si vous avez vos fichiers de configuration dans classpath (pas le dossier WEB-INF ou ses sous-dossiers), vous pouvez spécifier la liste des fichiers de configuration de cette manière;

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

Et vous devez également ajouter un écouteur spécial qui chargera vos fichiers de configuration:

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

Je viens d'ajouter la définition du bean dans applicationContext.xml comme Spring l'a demandé:

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

ajoutez ceci à votre web.xml

<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>
5
Patrikoko

Si cela peut aider quelqu'un, j’ai renommé l’un de mes packages, mais Eclipse ne met pas automatiquement à jour votre @ComponentScan _ chemins, alors assurez-vous de changer cela aussi:

@ComponentScan(basePackages = "com.package.spring")
1
achAmháin