SpringFramework/BASIC

[DELETE] 요청 POST방식/ (GET방식 불가)

유혁스쿨 2020. 9. 5. 02:08
728x90
반응형

html의 하이퍼링크나 자바스크립트의 Location같은 겟방식의 요청으로는 데이터를 조작명령 요청을 취해서는 안됩니다. (delete, update)

 

 GET방식은 주소창에 파라미터값이 노출되므로 주소의 파라미터 값을 조작해서 임의로 글을 수정,삭제 되는 경우가 발생할수 있기 때문입니다.

<a class="btn" href="<c:url value='/board/delete?boardNo=${article.boardNo}'/>" 
onclick="return confirm('정말로 삭제하시겠습니까?')"
style="background-color: red; margin-top: 0; height: 40px; color: white; 
border: 0px solid #388E3C; opacity: 0.8">삭제</a>

만약 삭제요청이 이렇게 GET방식으로 들어가고

 

@GetMapping("/delete")
    public String delete(int boardNo,RedirectAttributes ra) {
        System.out.println("URL : /board/delete GETT ");
        ra.addFlashAttribute("boardNo",boardNo);
        return "redirect:/board/delete_ok";
    }

컨트롤러에서 GET방식으로 삭제를 처리하게된다면

 

이것은 절대 해서는 안될 처리입니다.

 

무조건 POST방식을 처리해야만 합니다.

 

다른 누군가가 GET방식이라면 누군가가 delete/45 modify/45 주소창에 이렇게 입력한다면 게시글 삭제 혹은 수정에 대한 권한은 본인 혹은 관리자에게만 있기 때문에 타인에의해서 게시글이 삭제되거나 수정이 되면 안됩니다.

 

'안됩니다'

"안됬어요?"

'아니요 안되요'

"안됬었어요?"

'아니요 그냥 안되요!'

절대 안됩니다!!!

 

이럴때는 method 방식을 POST로 요청을 보내도록 하는 form태그와 submit버튼을 새로 지정해줘야겠지요

그리고 만약 기본적으로 제공되었던 템플릿의 버튼이 하이퍼링크의 css 디자인속성으로 버튼화 되있었다면...

submit버튼 포함 모든 버튼들의 디자인까지도 수정을 해줘야합니다... 어쩔수없습니다 이건..

 

<form role="form" action="<c:url value='/board/delete'/>" method="post">            
    <input type="hidden" name="boardNo" value="${article.boardNo}">    
    <input type="submit" value="삭제" class="btn btn-danger" o
    nclick="return confirm('정말로 삭제하시겠습니까?')">
</form>

 

이렇게말이죠, 또한 앞서 GET 방식이 였을때는 삭제하고자 하는 게시글의 번호를 파라미터를 주소를 통해 그대로 넘겼겠지만

POST방식에서는 넘어가질 않습니다.

물론 컨트롤러와 뷰페이지 본문상에서는 POST방식에서도 파라미터를 넘길수는 있지만 이것은 어디까지나 서버 내에서만 해당되는 부분이므로, 임의적으로 사용자가 주소창을 혹은 컨트롤러와 뷰페이지간에 링크를통해 파라미터를 심어서 보내는 방식은 절대적으로 불가능합니다.

 

이때는 hidden속성으로 name파라미터를 보내야합니다.

    <input type="hidden" name="boardNo" value="${article.boardNo}">    

 

이렇게 JSP단을 수정하게되면

메서드방식만 POST로 바꿔주면 올바르게 처리가됩니다.

@PostMapping("/delete")
    public String delete(int boardNo,RedirectAttributes ra) {
        System.out.println("URL : /board/delete GETT ");
        ra.addFlashAttribute("boardNo",boardNo);
        return "redirect:/board/delete_ok";
    }

 

 

 

포스팅을 마칩니다.

다들 힘내십시오

728x90
반응형