Wicket的SAML单点登录从挂载页面重定向?

问题描述 投票:0回答:1

我想在Wicket应用中使用Web SSO SAML。我想最好是挂载一个 "Web SSO SAML "页面。Page 并尝试使用 OpenSAML 中。

我尝试使用OpenSAML的 HTTPRedirectDeflateEncoder 直接在 HttpServletReponse 像这样。

    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?

redirect wicket saml
1个回答
0
投票

最后我是这样解决的。

public SSOSamlPage(final PageParameters pp) {
    final WebResponse webResponse = (WebResponse) this.getRequestCycle().getResponse();
    final HttpServletResponse httpServletResponse = (HttpServletResponse) webResponse.getContainerResponse();

     final IModel<String> urlModel = Model.of("");
    final HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder() {
        @Override
        protected void doEncode() throws MessageEncodingException {
            final MessageContext<SAMLObject> messageContext = this.getMessageContext();

            LOG.info("setRelayState for PP: {}", pp);

            SAMLBindingSupport.setRelayState(messageContext, PageParameterUtils.toBase64(pp));

            final SAMLObject outboundMessage = messageContext.getMessage();

            final String endpointURL = this.getEndpointURL(messageContext).toString();

            this.removeSignature(outboundMessage);

            final String encodedMessage = this.deflateAndBase64Encode(outboundMessage);

            final String redirectURL = this.buildRedirectURL(messageContext, endpointURL, encodedMessage);
            urlModel.setObject(redirectURL);
        }

    };
 ....
 throw new RedirectToUrlException(urlModel.getObject());
© www.soinside.com 2019 - 2024. All rights reserved.