2011-10-06 4 views
0

로컬 Tomcat 6 서버가있는 개인 웹 페이지에 Spring MVC를 사용하고 있습니다. 기본 Tomcat 구성을 사용하고 있습니다 (기본적으로 어떤 일식이 설정 될지).Spring/Tomcat 6 세션 만기 문제

내 컨트롤러에는 각 페이지마다 하나의 컨트롤러를 사용하고 그 사이에 정보를 전달하는 Session Bean을 작성하는 두 가지 방법이 있습니다. 하나는 POST를 캡처하는 방법이고 다른 하나는 GET 요청 방법을 캡처하는 것입니다. 페이지 로직은 사용자가 제출 버튼을 클릭하게하고 "redirect : abc.htm"리턴을 사용하여 새로운 페이지로 보내거나 GET 메소드로 되돌려줍니다.

쿠키를 명시 적으로 처리하지는 않지만 세션 빈에서 모든 정보를 갖고 있으며 보안/사용자 관리를 처리하기 위해 스프링 보안을 사용하고 있습니다.

나는 권한이없는 사용자를 다시 로그인 페이지로 리디렉션하는 스프링 보안 구성을 가지고 있습니다. 또한 HttpSessionRequiredException을 잡는 ExceptionHandler가 있는데, 이는 사용자 세션이 만료 될 때 트리거되는 것이 아닙니다 (Spring Security 구성의 논리를 사용함).

세션이 만료되면 (저는 Tomcat 관리자를 통해 이것을 수행하고 있습니다) 사용자는 다시 로그인 페이지로 리디렉션됩니다. 그들은 뭔가를 시도한 후에 리디렉션됩니다 (제출을 클릭하거나 login.htm을 제외한 모든 페이지를 다시 방문하십시오).

내 문제는 세션이 만료 된 초기 페이지로 돌아 오면 만료 시점에 제출 버튼을 클릭하면 초기 페이지를 지나가고 리디렉션되고 제출 된 POST 이벤트를 처리한다는 것입니다 .

예 :

  1. 사용자가 로그인하고 메인 페이지에
  2. 사용자 세션 메인 페이지에서
  3. 사용자 만료,
  4. 사용자가 다시 리디렉션 버튼을 제출 클릭 login.htm 페이지
  5. 사용자가 로그인하여 기본 페이지로 다시 이동합니다.
  6. 메인 페이지의 GET 로직을 따르는 대신, 메인 페이지의 POST로 처리되며, POST 변수의 출처가 확실하지 않습니다.

이 오류가 어디서 발생했는지 정확히 알 수있는 방법이 있습니까?

답변

1

이것은 스프링 보안으로 수행됩니다. Spring 보안은 사용자를 로그인 페이지로 리디렉션하기 전에 요청 세부 정보를 세션에 저장합니다. 로그인에 성공하면 세션에서 요청 세부 정보를 검색하고 해당 세부 정보로 리디렉션합니다.

form-login 구성의 always-use-default-target 특성을이 동작을 무시하도록 설정할 수 있습니다.

+0

완벽하게 작동했습니다. 정말 고맙습니다. default-target-url에 대한 설명서를 읽은 후에는 오류의 원인이라고 정확히 어디에서 확인할 수 있습니다. – Nicholas