为什么Spring安全会阻止POST?

时间:2014-11-07 12:40:52

标签: spring spring-mvc spring-security

我写过控制器。我有2种方法。首先是GET,第二是POST。 一切都运作良好!

何时我添加了spring-security.xml POST不起作用! 我的过滤器:

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

我有这个错误:

 HTTP Status 405 - Request method 'POST' not supported

我的春天安全看起来像这样:

   <http auto-config="false" use-expressions="true">
            <-- remove from here
            <intercept-url pattern="/admin**" access="hasRole('ADMINISTRATOR')" />
            <access-denied-handler error-page="/403" />

            <form-login login-page="/login" default-target-url="/admin"
                authentication-failure-url="/login?error" username-parameter="NAME"
                password-parameter="PASSWORD" />
            <logout logout-success-url="/login?logout" />
            <csrf />
           to here -->
        </http>
        <authentication-manager alias="authenticationManager">
        ...

最有趣的是,如果我删除 http标记的内容,的作品 ... 我也评论过......为什么会这样?

2 个答案:

答案 0 :(得分:1)

&lt; csrf /&gt;这会导致问题。 Post也应该发送csrf令牌。另请参阅Cross Site Request Forgery (CSRF)

答案 1 :(得分:1)

如果您想发送带有方法发布的表单。你需要像这样发送一个令牌

<input type="hidden" name="${_csrf.parameterName}"
                            value="${_csrf.token}" />

只需将此标记添加到youo表单中即可。