[펌] saveToken 사용방법

프로그래밍/Framework 2007. 11. 28. 10:07 Posted by galad
출처 블로그 > ★일휘소탕 혈염산하!™ ★
원본 http://blog.naver.com/daks0540/110011969505

원리..... 

일단 모델이   beforeAction => JSP =>afterAction

형태로 사용된다.


beforeAction에서 saveToken메서드를 실행시키면 requestScope과 sessionScope에 랜덤으로  ID 를 만들어 각각 저장한다.


sessionScope에 장장된 ID는 당연히 보장 될 것이고....


requestScope에 저장된 ID는 JSP페이지에 Hidden 형식의 태그를 생성하여 atterAction까지 이어진다.


******** hidden타입이 생긱기 위해서 <form>을 사용하면 안돼고 struts-html의  사용자 정의 태크인 <html:form>을 반듯이 이용해야 한다.


afterAction에서 두 스콥의 ID를 비교하여 일치하면 true를 아니면 false를 반환한다...


-----------------------

간단 코드로 살펴보면



*** beforeAction


 saveToken(request);

코드를 삽입  토근생성한다.


****JSP

<html:form>

을 작성...

<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
  value="랜덤함 키값">

위와 같은 hidden이 자동 생성된다.


*** afterAction


if (!isTokenValid(request)) { 
     //일치 여부 검증 틀렸을 경우 여기 실행... 조건문 앞에 ! 있다는 사실....



resetToken(request);  //일치할 경우 토근을 지운다.


// 일치할 경우 실행된 액션




saveToken() 사용법  10/14 09:55 

http://blog.naver.com/maydeen/100000321529

음, 혹 saveToken()에 대한 사용법에 대해 궁금해 하는 이들이 있을까 하여, 샘플 코드를 추가하였다. 사용법은 매우 간단하다.



1. 어떤 폼으로 보내는 Action

public class FindInvoiceAction extends BaseAction
{
  public ActionForward execute(ActionMapping mapping,
                                            ActionForm form,
                                            HttpServletRequest request,
                                            HttpServletResponse response)
  throws IOException, ServletException
  {
      ...
      saveToken(request); // 이것만 추가하면 됨
      return mapping.findForward(“saveInvoicePage”);
    }
}





2. 폼 전송을 처리하는 액션

public class SaveInvoiceAction extends BaseAction
{
    public ActionForward execute(ActionMapping mapping,
                                              ActionForm form,
                                              HttpServletRequest request,
                                              HttpServletResponse response)
    throws Exception {

      //token 체크. 현재 세션에 있는 token과 일치하지 않으면 더블 체킹 된 것이거나 유효하지 않은 요청이다.
        if (!isTokenValid(request)) {
          postGlobalError(Constants.DUPLICATE_FORM_ERROR, request);
          return mapping.findForward(“saveInvoicePage”);
        }
        ...
        //여기까기 온다면 모든게 잘 된 것이고, 새로운 토큰을 생성!!    또는 리셋
        saveToken(request); // resetToken(request);
        return mapping.findForward(“confirmInvoicePage”);
    }
}


saveToken()은 포워드방식으로 등록처리나 수정처리시 새로고침으로 인한 중복으로 값을

등록이나 수정하는 것을 방지 하기위해 쓰인다