You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by THMayr <Th...@adesso.de> on 2016/03/23 13:50:21 UTC
java.lang.IllegalStateException: Response already committed after
calling WebResponse.sendRedirect()
Hello,
I'm trying to implement logout using Wicket 7.2.0. I'm using container
managed form based login. So I implemented the logout sequence like this:
public class LogoutForm extends Form
{
protected void onSubmit ()
{
getSession ().invalidateNow ();
((WebResponse) getResponse ()).sendRedirect
("http://localhost:7101/WicketTest/welcome.html");
}
}
The code works, and the user is redirected to the specified page. But what
worries me is, that I get the following exception in the server log:
java.lang.IllegalStateException: Response already committed
at
weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:1853)
at
weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:953)
at
weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:948)
at
org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:296)
at
org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:409)
at
org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:602)
at
org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60)
at
org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97)
at
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:263)
at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at
oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at
oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:224)
at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3654)
at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at
weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
at
weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
at
weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
at
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
at
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
at
weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
at
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
at
weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
at
weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at
weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at
weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at
weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at
weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
So is something missing in my code? Wicket seems to do something with the
response although it is already committed.
Thanks for hints Thomas
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: java.lang.IllegalStateException: Response already committed
after calling WebResponse.sendRedirect()
Posted by THMayr <Th...@adesso.de>.
I just found a solution to get rid of the java.lang.IllegalStateException by
throwing another exception. I replaced the line
((WebResponse) getResponse ()).sendRedirect
("http://localhost:7101/WicketTest/welcome.html");
with the line
throw new
RedirectToUrlException("http://localhost:7101/WicketTest/welcome.html");
I wonder if this is the intended way to do it. Exceptions should normally
not used to control normal flow.
Thomas
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096p4674098.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: java.lang.IllegalStateException: Response already committed after
calling WebResponse.sendRedirect()
Posted by Martin Grigorov <mg...@apache.org>.
In that case you need to use RedirectToUrlException if the url is external
for Wicket.
Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov
On Wed, Mar 23, 2016 at 2:08 PM, THMayr <Th...@adesso.de> wrote:
> Hi Martin,
>
> thanks for your fast reply. Your solution works, but is not what I want. I
> want to redirect the user to an external page outside the secure area, so
> that the user isn't redirected to the login form.
>
> Thomas
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096p4674099.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
Re: java.lang.IllegalStateException: Response already committed
after calling WebResponse.sendRedirect()
Posted by THMayr <Th...@adesso.de>.
Hi Martin,
thanks for your fast reply. Your solution works, but is not what I want. I
want to redirect the user to an external page outside the secure area, so
that the user isn't redirected to the login form.
Thomas
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096p4674099.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: java.lang.IllegalStateException: Response already committed after
calling WebResponse.sendRedirect()
Posted by Martin Grigorov <mg...@apache.org>.
Hi,
On Wed, Mar 23, 2016 at 1:50 PM, THMayr <Th...@adesso.de> wrote:
> Hello,
>
> I'm trying to implement logout using Wicket 7.2.0. I'm using container
> managed form based login. So I implemented the logout sequence like this:
>
> public class LogoutForm extends Form
> {
> protected void onSubmit ()
> {
> getSession ().invalidateNow ();
> ((WebResponse) getResponse ()).sendRedirect
> ("http://localhost:7101/WicketTest/welcome.html");
>
Replace with:
getSession().invalidate();
setResponsePage(WebApplication.get().getHomePage());
}
> }
>
> The code works, and the user is redirected to the specified page. But what
> worries me is, that I get the following exception in the server log:
>
> java.lang.IllegalStateException: Response already committed
> at
>
> weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:1853)
> at
>
> weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:953)
>
It seems Wicket tries to do a second redirect. (Assuming the first one is
successful).
> at
>
> weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:948)
> at
>
> org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:296)
>
Put a breakoint here and see how many times and with what values it is
being called.
> at
>
> org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:409)
> at
>
> org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:602)
> at
>
> org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60)
> at
>
> org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97)
> at
>
> org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:263)
> at
>
> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
> at
>
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
> at
> oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
> at
>
> oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
> at
> oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
> at
> oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
> at
> oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
> at
> oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:224)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
> at
>
> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3654)
> at
>
> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
> at
>
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
> at
>
> weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
> at
>
> weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
> at
> weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
> at
>
> weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
> at
>
> weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
> at
>
> weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
> at
>
> weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
> at
>
> weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
> at
>
> weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
> at
>
> weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
> at
>
> weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
> at
>
> weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
> at
>
> weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
> at
>
> weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
> at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
> at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
>
> So is something missing in my code? Wicket seems to do something with the
> response although it is already committed.
>
> Thanks for hints Thomas
>
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>