【问题标题】:Spring security filters in web.xml giving 404 error. Not really understand whyweb.xml 中的 Spring 安全过滤器给出 404 错误。不是很明白为什么
【发布时间】:2015-12-07 15:11:53
【问题描述】:

我正在我的应用程序中实现 Spring Security,但是当我在 web.xml 中使用安全过滤器时出现 404 错误。我需要添加创建任何其他文件吗?我在某处读到了有关添加 securityContext.xml 的信息,但它仍然给我同样的错误。 下面是我的 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">

  <display-name>Archetype Created Web Application</display-name>


    <!-- Le dispatcher de servlet de spring -->
    <servlet>
        <servlet-name>TemptingPlacesMvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:applicationContext.xml,
                classpath:TemptingPlacesMvc-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>TemptingPlacesMvc</servlet-name>
        <url-pattern>*.mvc</url-pattern>
    </servlet-mapping>

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

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application-context-webservice.xml,classpath:applicationContext.xml,
                classpath:TemptingPlacesMvc-servlet.xml, 
                <!-- classpath:/WEB-INF/spring-security.xml --></param-value>
    </context-param>

     <!-- Le dispatcher de servlet de cxf -->
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocationCXf</param-name>
            <param-value>
                classpath:application-context-webservice.xml
            </param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>

    <!-- The Welcome File List -->
    <welcome-file-list>
        <welcome-file>/login/login.mvc</welcome-file>
    </welcome-file-list>

    <!--    Security Filter  -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>spring-securit.xml</param-name>
            <param-value>org.springframework.web.context.WebApplicationContext.ROOT
            </param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

</web-app>

spring-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">

<http auto-config="true">
    <intercept-url pattern="/admin**" access="ROLE_USER" />
    <form-login
        login-processing-url="/j_spring_security_check" 
        login-page="/login" 
        default-target-url="/welcome" 
        authentication-failure-url="/login?error" 
        username-parameter="username"
        password-parameter="password" />
    <logout logout-success-url="/login?logout" />
    <!-- enable csrf protection -->
    <csrf/>
</http>

<authentication-manager>
    <authentication-provider>
      <user-service>
        <user name="user" password="1234" authorities="ROLE_USER" />
      </user-service>
    </authentication-provider>
</authentication-manager>

securityContext.xml

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

    <beans:bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
        <filter-chain-map path-type="ant">
            <filter-chain pattern="/**" filters="sif"/>
        </filter-chain-map>
    </beans:bean>

    <beans:bean id="sif"
        class="org.springframework.security.context.HttpSessionContextIntegrationFilter" />

</beans:beans>

错误信息:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [WEB-INF/spring-security.xml]; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/spring-security.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342) ~[spring-beans-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) ~[spring-beans-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) ~[spring-beans-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) ~[spring-beans-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) ~[spring-beans-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) ~[spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) ~[spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) ~[spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:539) ~[spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451) ~[spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410) ~[spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) ~[spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) [spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887) [catalina.jar:7.0.39]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381) [catalina.jar:7.0.39]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.39]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [catalina.jar:7.0.39]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [catalina.jar:7.0.39]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_17]
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_17]
    at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17]
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/spring-security.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172) ~[spring-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329) ~[spring-beans-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    ... 22 common frames omitted
Sep 11, 2015 1:43:09 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [WEB-INF/spring-security.xml]; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/spring-security.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:539)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/spring-security.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
    ... 22 more

Sep 11, 2015 1:43:09 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Sep 11, 2015 1:43:09 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/temptingplaces-web] startup failed due to previous errors
Sep 11, 2015 1:43:09 PM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
13:43:09.755 [localhost-startStop-1] INFO  o.s.w.c.s.XmlWebApplicationContext - Closing Root WebApplicationContext: startup date [Fri Sep 11 13:43:07 MUT 2015]; root of context hierarchy
13:43:09.825 [localhost-startStop-1] WARN  o.s.w.c.s.XmlWebApplicationContext - Exception thrown from ApplicationListener handling ContextClosedEvent
java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Fri Sep 11 13:43:07 MUT 2015]; root of context hierarchy
    at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:347) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1051) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1012) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:586) [spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143) [spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4927) [catalina.jar:7.0.39]
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5573) [catalina.jar:7.0.39]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) [catalina.jar:7.0.39]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160) [catalina.jar:7.0.39]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [catalina.jar:7.0.39]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [catalina.jar:7.0.39]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_17]
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_17]
    at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17]
13:43:09.826 [localhost-startStop-1] WARN  o.s.w.c.s.XmlWebApplicationContext - Exception thrown from LifecycleProcessor on context close
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Fri Sep 11 13:43:07 MUT 2015]; root of context hierarchy
    at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:360) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1059) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1012) [spring-context-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:586) [spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143) [spring-web-3.2.13.RELEASE.jar:3.2.13.RELEASE]
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4927) [catalina.jar:7.0.39]
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5573) [catalina.jar:7.0.39]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) [catalina.jar:7.0.39]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160) [catalina.jar:7.0.39]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [catalina.jar:7.0.39]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [catalina.jar:7.0.39]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_17]
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_17]
    at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17]
Sep 11, 2015 1:43:09 PM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
    at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:171)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1092)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1066)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1012)
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:586)
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4927)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5573)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

login.jsp:

     <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html id="login">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><spring:message code="login.title" /></title>

</head>
<body>

    <div class="container spaceless">                                       
        <form name='loginForm' action="<c:url value='/j_spring_security_check' />" method='POST'>
            <table id="albums" cellspacing="0px" style="width: 100%;">                      
                <tr>
                    <td width="32%"  align="right" style="padding-right:13px;"><spring:message code="login.email" /></td>
                    <td style="padding-right: 22px;"><input type="text" name="j_username" size="29" style="width: 100%;"></td>
                </tr>       

                                            <tr class="spaceUnderLess">
                                                <td width="32%" align="right" style="padding-right:13px;"><spring:message code="login.password" /></td>
                                                <td style="padding-right: 22px;"><input type="password" name="j_password" size="29" style="width: 100%;"></td>
                                            </tr>

                                            <tr class="spaceUnderLess" >
                                                <td width="32%" ></td>
                                                <td>
                                                    <input type="checkbox" name="checkbox" id="checkbox_id" value="value">
                                                    <label for="checkbox_id"><spring:message code="login.remember" /></label>
                                                </td>
                                            </tr>   

                                            <tr class="spaceUnderLess" >
                                                <td colspan="2" align="right" style="padding-right: 19px;">
                                                    <span style="padding-right:13px;" class="colorText"><spring:message code="login.forget.password" /></span>
                                                    <button  class="btn btn-primary dropdown-toggle" type="submit" style="width:120px;"><spring:message code="login.btn.access" /></button>
                                                </td>                       
                                            </tr>                   
                                        </table>
                                    </form>
    </div>

</body>
</html>

【问题讨论】:

    标签: jsp spring-mvc spring-security


    【解决方案1】:

    您错过了允许匿名访问您的登录页面,否则您的登录页面将被禁止访问。尝试如下 似乎您的 login-processing-url="/j_spring_security_check" ,尝试将其更改为 "/login" 否则添加如下 url 模式以允许对该 url 进行匿名访问

    <http auto-config="true">
     <intercept-url pattern="/login" access="isAnonymous()" />
     <intercept-url pattern="/j_spring_security_check" access="isAnonymous()" />
    

    更新: 像这样修复你的 web.xml

    Context-param 应该初始化除 MVC 之外的所有 bean,因为您有 dispatcher-servlet 为此,否则您将在 2 个不同的上下文中加载重复的 bean。

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

    Dispatcher 应该处理 MVC 相关的配置。

    <servlet-name>TemptingPlacesMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/TemptingPlacesMvc-servlet.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    

    安全过滤器不需要安全配置,因为它们会在上下文中被初始化

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

    解决这个问题

      Error creating bean with name 'org.springframework.security.filterChainProxy': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.security.web.access.expression.WebSecurityExpressionRoot.set‌​DefaultRolePrefix(Ljava/lang/String;)
    

    尝试在你的项目中包含 spring-security-core,如果你使用的是 maven pom.xml add

     <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.2.3.RELEASE</version> </dependency> 
    

    解决这个问题
    在请求参数“_csrf”或标头“X-CSRF-TOKEN”上发现无效的 CSRF 令牌“null”

    您已启用 csrf ,因此每个 POST 请求都需要 csrf 令牌。 所以要么禁用

    <csrf disabled="true"/> 
    

    或在您发出的每个 POST 请求中提供令牌,如下所示

    <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
    <form action="${loginUrl}" method="POST">
         <sec:csrfInput />
    

    <form action="${logoutUrl}" method="post">
      <input type="submit" value="Log out" />
      <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    </form>
    

    【讨论】:

    • 我的 spring-security.xml 在 WEB-INF 中。我尝试更改路径并完全设置它,但我收到相同的错误消息。
    • 不幸的是,我仍然遇到一些问题。现在我收到此错误:创建名称为“org.springframework.security.filterChainProxy”的bean时出错:init方法的调用失败;嵌套异常是 java.lang.NoSuchMethodError: org.springframework.security.web.access.expression.WebSecurityExpressionRoot.setDefaultRolePrefix(Ljava/lang/String;)V 如果您对如何解决这个问题有任何想法,欢迎您.否则,非常感谢你帮助我。
    • 尝试在你的项目中包含 spring-security-core,如果你使用的是 maven pom.xml 添加 org.springframework.securityspring-security -core3.2.3.RELEASE
    • 酷。它可以工作,但我在请求参数“_csrf”或标头“X-CSRF-TOKEN”上找到了无效的 CSRF 令牌“null”。我在 spring-security.xml 中确实无法 。我在某处遗漏了什么?
    • 是的,我想通了。除了我收到另一个错误:HTTP 状态 404 - /temp/j_spring_security_check。我感觉又回到了原点。我以为我做了这一切是为了避免这个错误。会是什么呢?根据this site,我应该在j_spring_security_check前面添加/。但这并不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多