form 전송시 1회성 인증키인 csrf토큰을 넣어줘서 보안 처리
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
or
<form method = "post" action="/add?${_csrf.parameterName}=${_csrf.token}">
</form>
토큰 없이 post로 요청하면 403에러가 발생한다.
->보안이 상관없어서 토큰을 안보낼거면 security-context.xml의 <security:csrf disabled="true"/> 을 통해 비활성화를 해야 한다.
//pom.xml(Spring Security Taglibs 주입)
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<sec:authentication property="principal" var="user"/><!--*-->
<sec:authorize access="isAuthenticated()">
<form action="/logout">
<input type="hidden" name = "bwriter" value = "${user.username }"><!--*-->
<input type="submit" class="btn btn-success" value="Logout" />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>
</sec:authorize>
<sec:authorize access="isAnonymous()">
<form action="/login">
<input type="submit" class="btn btn-primary" value="Login" />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>
</sec:authorize>
<script>
function ajaxremoveFromCart(item) {
$.ajax({
type:"POST",
url:"/cars/ajaxremove",
data:{cid:item},
beforeSend : function(xhr)
{ /*데이터를 전송하기 전에 헤더에 csrf값을 설정한다*/
xhr.setRequestHeader("${_csrf.headerName}", "${_csrf.token}");
},
success:function(result) {
list();
},
error:function(request, status, error) {
alert(request.status + " " +request.responseText);
}
})
}
</script>