복붙노트

[SPRING] Spring MVC에서 세션 타임 아웃 설정하기

SPRING

Spring MVC에서 세션 타임 아웃 설정하기

Spring에서 세션 타임 아웃을 지정하는 방법이 있습니까? web.xml에서 지정할 수 없습니다. 컨트롤러에서 세션 범위 Bean을 다음과 같이 사용하고 있습니다.

Spring XML 파일을 통해 컨트롤러를 구성했습니다.

class xyzController{

     ABCSessionScopeClass objectWhichWillBeStoredInSession;
}

나는 이것을 사용할 수 없다.

session.setMaxInactiveInterval(60*60);

이 일을하는 다른 방법이 있습니까? 세션 당 시간 초과 또는 모든 세션에 대해 동시에 설정하는 것을 신경 쓰지 않습니다.

해결법

  1. ==============================

    1.Pure Spring MVC, servlet context.xml을 사용하는 솔루션

    Pure Spring MVC, servlet context.xml을 사용하는 솔루션

    <mvc:interceptors>
        <bean class="com.xxx.SessionHandler" />
    </mvc:interceptors>
    

    핸들러 어댑터

    @Component
    public class SessionHandler extends HandlerInterceptorAdapter {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            request.getSession().setMaxInactiveInterval(60*60);
            return true;
        }
    }
    

    당신이 봄 보안을 사용한다고 가정하면,

    성공적으로 로그인 할 때마다 가장 좋은 방법은 LoginSuccessHandler를 생성하고 remember-me뿐만 아니라 일반 로그인을위한 authentication-success-handler를 지정하는 것입니다.

    @Service
    public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
        @Override
        public void onAuthenticationSuccess(
                HttpServletRequest request,
                HttpServletResponse response,
                Authentication authentication) throws ServletException, IOException {
            request.getSession().setMaxInactiveInterval(60*60);
            super.onAuthenticationSuccess(request, response, authentication);
        }
    
    }
    

     

    <http auto-config="true" use-expressions="true">
        <form-login login-page="/login"
            authentication-failure-url="/login.hst?error=true"
            **authentication-success-handler-ref="loginSucessHandler"** />
        <logout invalidate-session="true" logout-success-url="/home" logout-url="/logout" />
        <remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/>
        <session-management>
            <concurrency-control max-sessions="1" />
        </session-management>
    </http>
    
  2. ==============================

    2.Spring 설정 파일을 통해 세션 타임 아웃 값을 지정하는 방법을 찾지 못했습니다. 빈을 사용하여 세션에 대한 값 / 객체 읽기 / 쓰기를 관리 할 필요가 없습니다. 이제 서블릿 API를 사용하지 않고 세션 타임 아웃 값을 설정하기를 원합니다. 그러나 web.xml 파일 이외의 다른 방법을 지정할 방법이없는 것처럼 보입니다. 그래서 서블릿 api request.getSession ()을 사용하여 타임 아웃 기간을 설정했다. 시간 값을 외부화하여 코드를 다시 컴파일하지 않고 쉽게 변경할 수 있습니다. 누구든지 더 나은 접근 방법을 찾으면 언제든지 게시 해주십시오. 더 잘 발견되면 그 대답으로 받아 들일 수 있습니다.

    Spring 설정 파일을 통해 세션 타임 아웃 값을 지정하는 방법을 찾지 못했습니다. 빈을 사용하여 세션에 대한 값 / 객체 읽기 / 쓰기를 관리 할 필요가 없습니다. 이제 서블릿 API를 사용하지 않고 세션 타임 아웃 값을 설정하기를 원합니다. 그러나 web.xml 파일 이외의 다른 방법을 지정할 방법이없는 것처럼 보입니다. 그래서 서블릿 api request.getSession ()을 사용하여 타임 아웃 기간을 설정했다. 시간 값을 외부화하여 코드를 다시 컴파일하지 않고 쉽게 변경할 수 있습니다. 누구든지 더 나은 접근 방법을 찾으면 언제든지 게시 해주십시오. 더 잘 발견되면 그 대답으로 받아 들일 수 있습니다.

  3. from https://stackoverflow.com/questions/12082677/setting-session-timeout-in-spring-mvc by cc-by-sa and MIT license