오늘 한 것
- ajax에서 호출 시 계속 403, 리스트로 받는 checkbox 삭제는 404가 떴다.
- 이것저것 ajax를 시도해봤으나 계속 403, 404, xhr문제가 떴었다. 근데 결국 검색해 찾아냈다.
- 구글 검색 결과의 몇몇 문서에서는 http.csrf().disable()와 같이 csrf를 disable 하라고 하지만 이렇게 할 경우 보안에 문제가 발생할 수 있기 때문에 좋지않다.
그럼 csrf 가 enable 되어 있는 상태에서 403 Forbidden 에러가 발생하지 않게 하려면?
Ajax 요청 Header에 csrf token 정보를 포함해서 전송하면 된다고 한다.
HTML의 <head> 내에 csrf meta tag를 추가한다.
<meta id="_csrf" name="_csrf" th:content="${_csrf.token}"/> <!-- default header name is X-CSRF-TOKEN --> <meta id="_csrf_header" name="_csrf_header" th:content="${_csrf.headerName}"/> // ----------- var token = $("meta[name='_csrf']").attr("content"); var header = $("meta[name='_csrf_header']").attr("content"); $(function () { $(document).ajaxSend(function(e, xhr, options) { xhr.setRequestHeader(header, token); });
- check 박스는 리스트로 받아서 지우려고 했으나 그보다 js로 웹에서 지우고 controller에서 호출해 지우는 편이 더 깔끔한 것 같아서 html에선 document.remove를 이용하고 controller에선 받아 db에서 지웠다
이 주에 할 것
- bookmark delete ajax 작성(v)
- 삭제를 실행하는 user id에 맞는 bookmark id를 대조해 삭제한다.
- 개별삭제, 선택삭제(전체삭제) 구현
- bookmark send ajax 작성()
- isbn을 challenge에 보내 book db에서 검색한뒤 challenge add에 값을 넘겨 실행한다.
- bookmark add ajax 작성()
- challenge add에서 bookmark add 버튼을 눌렀을 때 book db에 isbn, 썸네일, title이 저장