[SPRING] Spring 웹 플로우에서 "죽은"세션 잡기
SPRINGSpring 웹 플로우에서 "죽은"세션 잡기
세션이 만료 될뿐만 아니라 (예를 들어 보고서의 경우) 내 세션을 잃어 버렸을 때 던져지는 예외를 잡아 내고 싶습니다. 또한이 처리기를 해당 특정 예외를 처리하고 전역 예외 처리기 또는 이와 같은 것을 원하지 않습니다. 기본적으로 org.springframework.web.HttpSessionRequiredException 예외를 catch하고 싶습니다.
해결법
-
==============================
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의 해결책을 추천 할 것이다. 세 번째 솔루션의 링크에는 세션을 처리하기위한 몇 가지 사실적인 솔루션이 있습니다.
from https://stackoverflow.com/questions/29901635/catch-dead-session-in-spring-webflow by cc-by-sa and MIT license