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.
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>
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"/>
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>
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")