2014-11-07 3 views
0

컨트롤러를 작성했습니다. 2 가지 방법이 있습니다. 먼저 GET이면 POST가 두 번째입니다. 모든 것이 잘 작동합니다!스프링 보안이 왜 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 태그 내용 내용 ... 나는 너무 논평했다 ... 왜 이것이 일어나는가?

답변

1

해당 문제가 발생한 < csrf/>입니다. 포스트는 csrf 토큰도 보내야합니다. 참고 사항 Cross Site Request Forgery (CSRF)

+0

CSRF 오류로 인해 일반적으로 다른 오류 메시지 인 상태 403이 발생합니다. – holmis83

+0

을 제거해야하나요? 아니면이 문제를 해결할 다른 방법이 있습니까? – grep

+0

이것은 요구 사항에 따라 다릅니다. 아이디어를 얻으려면 답변 링크를 참조하십시오. – grid

1

방법 게시와 함께 양식을 보내려는 경우. 이 토큰을 보내야합니다.

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

이 태그를 youo 형식으로 추가하기 만하면됩니다.

관련 문제