【发布时间】:2016-09-23 11:19:41
【问题描述】:
我想在我的 Wicket 应用程序中使用 Web SSO SAML。我认为挂载Page 并尝试在其中使用OpenSAML 是个好主意。
我尝试像这样在HttpServletReponse 上直接使用OpenSAML 的HTTPRedirectDeflateEncoder:
WebResponse webResponse = (WebResponse) this.getRequestCycle().getResponse();
HttpServletResponse httpServletResponse = (HttpServletResponse) webResponse.getContainerResponse();
然后我使用解码器构建重定向并提交响应。
但是,当然,这会产生错误,因为我误用了 Wicket 方式做事。
2016-09-23 13:13:16,236 ERROR - ListenerCollection - Error invoking listener: org.apache.wicket.Application$3@4c8f505b
java.lang.IllegalStateException: Response is committed
以我可以访问 Wicket 的会话等的方式进行重定向的正确方法是什么?因为如果我知道用户的某些属性(可能已经有WicketSession),我想阻止这种重定向?
【问题讨论】:
-
你在哪里做重定向?看起来您尝试在响应已提交的请求周期结束时执行此操作。是否可以在 IRequestCycleListener 中执行此操作?
-
我目前在
Page的构造函数中执行此操作。我知道有一个RedirectException,但这并不能提供足够的控制。我将如何在IRequestCycleListener中做到这一点?我从来没有在 Wicket 内部干预过这么远 -
目前还不清楚您到底在做什么。仅仅打开容器响应不应该导致这样的错误。你在页面构造函数中用它做什么?
-
好吧,我真的不需要在
Page构造函数中这样做,但我还找不到更好的方法。我想根据WicketSession中的值直接重定向到外部网址,并且我需要能够将标头添加到HttpServletResponse。 -
目前还不清楚为什么它在页面构造函数中失败并出现此错误。但我建议您改用 IRequestCycleListener#onBeginRequest()。