Hi,
I am using Spring OAuth2ClientContextFilter to handle the OAuth Dance.
In the thread calling stack, OAuth2ClientContextFilter is in the
upstream of WicketFilter (See below the Error Message).
When an access token is needed, I'd like to throw an
OAuth2AccessTokenRequiredException exception in Wicket so as to ask the
upstream OAuth2ClientContextFilter to handle the exception to redirect
the user to be authenticated.
But the problem is Wicket Page seems not able to throw an exception as
below:
public HomePage(final PageParameters parameters) throws Exception {
}
################### Error Message ###################
Last cause: OAuth2 access denied.
WicketMessage: Can't instantiate page using constructor 'public
com.mycompany.HomePage(org.apache.wicket.request.mapper.parameter.PageParameters)
throws java.lang.Exception' and argument ''. Might be it doesn't exist,
may be it is not visible (public).
Stacktrace
Root cause:
org.springframework.security.oauth2.client.OAuth2AccessTokenRequiredException:
OAuth2 access denied.
at com.mycompany.HomePage.<init>(HomePage.java:22)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:170)
at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:75)
at
org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:133)
at
org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:278)
at
org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166)
at
org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
at
org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:94)
at
org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:244)
at
org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:165)
at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:830)
at
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:253)
at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
at
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:281)
at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:245)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:312)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
at
org.springframework.security.oauth2.client.filter.OAuth2ClientContextFilter.doFilter(OAuth2ClientContextFilter.java:94)
#####################################################
While in Spring MVC, an exception can be thrown like this:
@RequestMapping("/orcid/info")
public String orcidInfo(Model model, HttpSession session) throws
Exception {
}
My question is: how can I throw an exception in Wicket, which will be
handled by another upstream filter, say OAuth2ClientContextFilter in
this case.
Many thanks,
Yuci