원리.....
일단 모델이 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()은 포워드방식으로 등록처리나 수정처리시 새로고침으로 인한 중복으로 값을
등록이나 수정하는 것을 방지 하기위해 쓰인다
'프로그래밍 > Framework' 카테고리의 다른 글
[펌] Hibernate 3.02 Reference Document 한글 버전 (0) | 2007.11.28 |
---|---|
[펌] ibatis (0) | 2007.11.28 |
[펌] 중복처리 (saveToken() ) 를 일반 form 에서 사용하기 (0) | 2007.11.28 |
[펌] saveToken/ resetToken (0) | 2007.11.28 |
[펌] 스트럿츠에서의 파일 업로드 (0) | 2007.11.28 |