gpt4 book ai didi

spring-webflow - 在 Spring WebFlow 中优雅地处理过期的 HttpSession

转载 作者:行者123 更新时间:2023-12-04 15:02:27 26 4
gpt4 key购买 nike

(来自 SpringSource forum。)

HttpSession已过期并且用户重新提交流程中的页面,他/她将被送回流程的开头。我想添加到此行为的只是一条消息,解释它发生的原因。 “你没有事件,所以你被重启了……”

执行此操作的最简单/最佳实践方法是什么?

最佳答案

默认行为,在 FlowHandlerAdapter.defaultHandleException() , “尝试开始新的已结束或过期流的执行”。

看起来处理这种情况的 WebFlow 方法是提供 FlowHandlerhandleException()检查 instanceof NoSuchFlowExecutionException 的方法,然后做一些事情,比如构建一个重定向 URL 或在 Session 范围内放置一些东西,以后可以在使用后将其删除。

由于 WebFlow 使用重定向的方式,我认为任何其他范围都不允许在新流的 View 呈现时稍后使用此类标志或消息。

但是,只需在 Interceptor 中检测新 session 即可。甚至 Filter似乎同样有效。正如引用的论坛帖子中所记录的那样,这就是我在之前对此进行的调查中最终做的事情。我只是希望有更漂亮的东西。

此外,在新流开始时,已经创建了一个新的 session ID,因此无法从 flow.xml 中最初检测到这种情况。

示例过滤器逻辑:

if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) {
log.info("Expired Session ID: " + request.getRequestedSessionId());
response.sendRedirect("sessionExpired");
}
else {
chain.doFilter(request, response);
}

示例拦截器:

public class SessionExpiredInterceptor extends HandlerInterceptorAdapter
{
private String redirectLocation = "sessionExpired";

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception
{
if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid())
{
response.sendRedirect(redirectLocation);
return false;
}

return true;
}

public String getRedirectLocation() {
return redirectLocation;
}

public void setRedirectLocation(String redirectLocation) {
this.redirectLocation = redirectLocation;
}
}

关于spring-webflow - 在 Spring WebFlow 中优雅地处理过期的 HttpSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com