복붙노트

[SPRING] Spring 웹 플로우에서 "죽은"세션 잡기

SPRING

Spring 웹 플로우에서 "죽은"세션 잡기

세션이 만료 될뿐만 아니라 (예를 들어 보고서의 경우) 내 세션을 잃어 버렸을 때 던져지는 예외를 잡아 내고 싶습니다. 또한이 처리기를 해당 특정 예외를 처리하고 전역 예외 처리기 또는 이와 같은 것을 원하지 않습니다. 기본적으로 org.springframework.web.HttpSessionRequiredException 예외를 catch하고 싶습니다.

해결법

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

    1.아래 제안 된 솔루션 중 하나를 사용하면 예외를 처리하고 논리를 수행 할 수 있어야합니다.

    아래 제안 된 솔루션 중 하나를 사용하면 예외를 처리하고 논리를 수행 할 수 있어야합니다.

    가능한 해결책:

    1. throw 된 모든 예외를 수신하고 instanceof로 필터링 할 수있는 FlowExecutionListenerAdapter를 추가 할 수 있습니다.

    import org.springframework.webflow.execution.FlowExecutionListenerAdapter;
    import org.springframework.binding.mapping.MappingResult;
    import org.springframework.webflow.engine.FlowAttributeMappingException;
    import org.springframework.webflow.execution.ActionExecutionException;
    import org.springframework.webflow.execution.FlowExecutionException;
    import org.springframework.webflow.execution.RequestContext;
    
    public class LoggingExceptionFlowExecutionListenerAdapter extends FlowExecutionListenerAdapter {
    
        @Override
        public void exceptionThrown(RequestContext context, FlowExecutionException exception) {
             if (exception instanceof HttpSessionRequiredException) {
                    // do something
             } else if(exception instanceof FlowAttributeMappingException) {
                    // do something else 
             }
        }
    }
    

    webflow executor config에 추가해야합니다.

    <bean id="loggingExceptionFlowExecutionListenerAdapter" class="my.package.LoggingExceptionFlowExecutionListenerAdapter"/>
    
    <webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry">
        <webflow:flow-execution-listeners>
           <webflow:listener ref="loggingExceptionFlowExecutionListenerAdapter"        
        </webflow:flow-execution-listeners>
    </webflow:flow-executor>
    

    2. 또 다른 해결책은 자신의 FlowExecutionExceptionHandler를 구현하는 것입니다. 그것은 전역 예외 처리기가 될 것이지만 방법

    public void handle(FlowExecutionException exception,
                RequestControlContext context) { } 
    

    다양한 변수를 필터링 할 수있는 컨텍스트에 대한 액세스 권한을 가질 수 있습니다. 인터페이스 FlowExecutionExceptionHandler 구현 방법을 참조하십시오.

    3. Spring Security 프로젝트를 사용하고 있다면 또 다른 가능한 해결책은 다음과 같은 설정을 가지고 있다면 Spring 보안이 자동으로 예외를 처리 할 것이라고 생각합니다 :

    <security:http auto-config="true" use-expressions="true">
            <!-- rest of config omitted -->
            <security:session-management invalid-session-url="/login"/>
    </security:http>
    

    예외를 잡아서 로직을 수행하기를 원한다면 다음 응답을보십시오 : 로그 아웃 / 세션 타임 아웃 스프링 보안 잡기

    나는 최소한의 방해가되기 때문에 제 3의 해결책을 추천 할 것이다. 세 번째 솔루션의 링크에는 세션을 처리하기위한 몇 가지 사실적인 솔루션이 있습니다.

  2. from https://stackoverflow.com/questions/29901635/catch-dead-session-in-spring-webflow by cc-by-sa and MIT license