트랜잭션 처리 후 재실행(F5키, 뒤로가기 버튼 등등)을 막기 위해서는 세션값을 체크해서 처리한다.
일단 로그인하면서 세션을 생성해서 저장하고,
JSP 페이지에
이렇게 세팅을 한다.
주의할 점은 sendRedirect.do 나 insertData.do 등의 모든 처리에서 세션값을 가져가야 한다.
대부분 sendRedirect.do 에서는 그냥 페이지만 이동하는 경우가 많다.
세션을 가져가느냐 아니냐에 따라서
sendRedirect.do / sendRedirectWithSession.do 이렇게 두개를 만들어서 사용하는것도 괜찮은 방법이다.
다음 컨트롤러에서
이런식으로 받아서 처리한다.
그리고 처리한 뒤에는
이렇게 다시 세션토큰을 설정한다.
사실 간단한 방법은 아니다.
보통은 세션을 세팅하는 JSP페이지를 만들어 놓고 사용하고자 하는 JSP 페이지 처음부분에 import해서 사용한다. 뭘 사용하느냐는 각자의 자유.
일단 로그인하면서 세션을 생성해서 저장하고,
JSP 페이지에
<input type="hidden" name="sessionToken" value="${sessionToken}" />
이렇게 세팅을 한다.
주의할 점은 sendRedirect.do 나 insertData.do 등의 모든 처리에서 세션값을 가져가야 한다.
대부분 sendRedirect.do 에서는 그냥 페이지만 이동하는 경우가 많다.
세션을 가져가느냐 아니냐에 따라서
sendRedirect.do / sendRedirectWithSession.do 이렇게 두개를 만들어서 사용하는것도 괜찮은 방법이다.
다음 컨트롤러에서
public void checkSessionAndResetToken(HttpServletRequest request) {
HttpSession session = request.getSession();
String sessionToken = (String) session.getAttribute("sessionToken");
// Token 처리
String formToken = request.getParameter("sessionToken");
logger.debug("Form Token [{}], Session Token [{}] 으로 중복 요청을 확인합니다.", formToken, sessionToken);
if (formToken == null || "".equals(formToken) || !sessionToken.equals(formToken)) {
logger.debug("중복된 요청입니다. 요청을 처리할 수 없어서 예외를 던집니다.");
DuplicatedRequestException exception = new com.skt.isf.management.exception.DuplicatedRequestException("중복된 요청입니다. 요청을 처리할 수 없습니다.");
exception.setNextTarget("/sendRedirect.do?nextTarget=/isfadmin/info/manage.jsp");
throw exception;
}
// Token 갱신
request.getSession().setAttribute("sessionToken", JVMIDUtils.generateUUID());
}
HttpSession session = request.getSession();
String sessionToken = (String) session.getAttribute("sessionToken");
// Token 처리
String formToken = request.getParameter("sessionToken");
logger.debug("Form Token [{}], Session Token [{}] 으로 중복 요청을 확인합니다.", formToken, sessionToken);
if (formToken == null || "".equals(formToken) || !sessionToken.equals(formToken)) {
logger.debug("중복된 요청입니다. 요청을 처리할 수 없어서 예외를 던집니다.");
DuplicatedRequestException exception = new com.skt.isf.management.exception.DuplicatedRequestException("중복된 요청입니다. 요청을 처리할 수 없습니다.");
exception.setNextTarget("/sendRedirect.do?nextTarget=/isfadmin/info/manage.jsp");
throw exception;
}
// Token 갱신
request.getSession().setAttribute("sessionToken", JVMIDUtils.generateUUID());
}
이런식으로 받아서 처리한다.
그리고 처리한 뒤에는
public void setSessionToken(HttpServletRequest request) {
String uuid = JVMIDUtils.generateUUID();
request.getSession().setAttribute("sessionToken", uuid);
request.setAttribute("sessionToken", uuid);
}
String uuid = JVMIDUtils.generateUUID();
request.getSession().setAttribute("sessionToken", uuid);
request.setAttribute("sessionToken", uuid);
}
이렇게 다시 세션토큰을 설정한다.
사실 간단한 방법은 아니다.
보통은 세션을 세팅하는 JSP페이지를 만들어 놓고 사용하고자 하는 JSP 페이지 처음부분에 import해서 사용한다. 뭘 사용하느냐는 각자의 자유.
'Development > Java, JSP' 카테고리의 다른 글
GPKI 라이브러리를 이용한 암복호화 구현하기. (1) | 2017.01.03 |
---|---|
컴파일러 오류 발생. (0) | 2010.12.24 |
콜백 메서드란? (0) | 2010.07.07 |
Resource bundle을 만들기 위한 two-letter ISO language code (0) | 2009.01.23 |
다국어지원용 한글변환 (0) | 2009.01.22 |