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

Reply via email to