스프링 컨트롤러 뒤로가기 - seupeuling keonteulolleo dwilogagi

response.setContentType("text/html; charset=euc-kr");

PrintWriter out = response.getWriter();

out.println("<script>");

out.println("alert('로그인 후 이용 가능 합니다.')");

out.println("history.back()");

out.println("</script>");

out.flush();

throw new Exception();

@GetMapping("main")
public String main() {
    if(특정조건){
        "redirect:fail"; // '/fail' path로 리다이렉트
    }
    return "main";
}

특정조건인 경우 특정 path로 redirect 하게 해준다.

@GetMapping("main")
public String main() {
    if(특정조건) {
        return "fail"; // fail.jsp 반환
    }
    return "main";
}

특정조건인 경우 특정 페이지를 내려준다. (이 경우는 리다이렉트가 아님)

로그아웃을 한 직후에 뒤로가기 버튼을 눌렀을때 다시 로그인이 되는일이 없도록 해야할것이다. 

브라우저가 캐쉬에 있는 값을 다시 읽기 때문에 이런일이 발생하는것인데, 아래 코드를 스프링 설정파일에 추가하게 되면

뒤로가기를 눌렀을때 캐시가 남아있지 않게 되어서 다시 로그인을 하게끔 만들어준다.

<!-- 컨트롤러로 요청이 가기전에 인터셉트 -->

<mvc:interceptors>

<mvc:interceptor>

<mvc:mapping path="/board/**"/> <!-- http://localhost:8181/ex/board/ 포함 및 그 하위 경로를 나타냄 -->

<mvc:mapping path="/logout/**"/>

<mvc:mapping path="/memberinfo/**"/>

<mvc:exclude-mapping path="/list/**"/>

<beans:bean class="com.javalec.ex.Interceptor.LoginCheckInterceptor"/>

</mvc:interceptor>

<!-- 아래 내용은 로그아웃후 뒤로가기버튼눌렀을때 다시 로그인 되는것을 방지하기 위함. -->

<beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">

        <beans:property name="cacheSeconds" value="0" />

        <beans:property name="useExpiresHeader" value="true" />

        <beans:property name="useCacheControlHeader" value="true" />

        <beans:property name="useCacheControlNoStore" value="true" />

        <beans:property name="cacheMappings">

                           <beans:props> <!-- 아래 경로에만 뒤로가기 제한시킴. -->

                                  <beans:prop key="/index/**">86400</beans:prop>

                           </beans:props>

    </beans:property>

     </beans:bean>

</mvc:interceptors>

출처: http://simsimjae.tistory.com/8 [흔한 컴공의 코딩 블로그]

른록노트

@ 방법

해당 Controller 헤더에 추가하기

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.

참고사이트

https://okky.kr/article/363862

정말로 서버에서 모든 페이지에서 권한을 체크한다면 화면이 표시될 수 없지요..

뒤로가기 버튼의 경우 해당 페이지 내용을 캐쉬에 보관하고 있는 상태이므로 서버에 요청이 넘어가지도 않고 브라우져수준에서 다시 보여주기만 하는 경우입니다.

response.setHeader("cache-control","no-cache");
   response.setHeader("expires","0");
   response.setHeader("pragma","no-cache");

해더에 위와 같은 정보를 추가한 페이지는 항상 서버에서 값을 가져옵니다.

권한체크영역의 모든 response에 포함되어 있어야 합니다. (로그아웃 페이지가 아니죠...)

공통 상위컨트롤러가 있다면 그쪽에서 추가하시면 될 듯 하고..

아니면 필터를 사용해서 전 페이지에 캐쉬를 꺼버릴 수도 있겠군요... (대신 서버 성능은 더 나빠질지도..)

도움이 되셨길 바랍니다.

2010년 4월 28일 오전 11:34, Bacsu337 <>님의 말:

안녕하십니까?
양수창이라고 합니다....

 항상 여러분들 메일을 보면서 여러가지로 도움을 받고 있습니다.

늘 감사히 생각하고 있습니다.

꾸벅!

각설 하고 , 현재 스프링 아이바티스 벨로시티 를 이용해 플잭을 진행 중입니다.

그런데 로그아웃후 뒤로가기 버튼을 누르면 이전 화면이 보이게 됩니다 .

서버쪽에서 모든 화면의 권한을 체크 합니다만 뒤로버튼의 강력함에 경이로워 할뿐 해결 방안을 찾지못하고 있습니다.

염치불구 조언을 부탁 드립니다.....

꾸벅 꾸벅 굽슨굽슨

나의 iPhone에서 보냄


--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 (으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

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

010-3339-1286
김 성국
-----------------------------------

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 (으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.