본문 바로가기

Spring

Spring Security CSRF xml 설정 제외 url request-matcher-ref

Spring Security CSRF XML 설정

 

spring에서 csrf를 설정하는 방법은  java와 xml 설정 두 가지가 있는데 그 중 xml로 설정하는 방법

 

 

sec:http 에 <sec:csrf  request-matcher-ref="" /> 를 설정한다.

AndRequestMattcher 를 이용하여 제외할 url을 패턴을 설정한다.

 

<sec:http>
  <intercept-url pattern="" access="" />
  <form-login ...

  <sec:csrf request-matcher-ref="csrfMatcher" />
</sec:http>

<beans:bean id="csrfMatcher" class="org.springframework.security.web.util.matcher.AndRequestMatcher">
  <beans:constructor-arg name="requestMatchers">
    <beans:list>
      <beans:bean class="org.springframework.security.web.csrf.CsrfFilter$DefaultRequiresCsrfMatcher" />
      <beans:bean class="org.springframework.security.web.util.matcher.NegatedRequestMatcher">
        <beans:constructor-arg>
          <beans:bean class="org.springframework.security.web.util.matcher.AntPathRequestMatcher">
            <beans:constructor-arg value="/login/**" />
          </beans:bean>
        </beans:constructor-arg>
      </beans:bean>
      <beans:bean class="org.springframework.security.web.util.matcher.NegatedRequestMatcher">
        <beans:constructor-arg>
          <beans:bean class="org.springframework.security.web.util.matcher.AntPathRequestMatcher">
            <beans:constructor-arg value="/common/**" />
          </beans:bean>
        </beans:constructor-arg>
      </beans:bean>
    </beans:list>
  </beans:constructor-arg>
</beans:bean>

 

 

jsp 화면에서 form 태그 안에 input hidden 을 만들고 csrf 토큰 값을 받을 수 있도록 name과 value에 아래와 같이 작성한다.

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