首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有浏览器的SAML和Java独立应用程序?

没有浏览器的SAML和Java独立应用程序?
EN

Stack Overflow用户
提问于 2014-11-25 17:42:28
回答 1查看 1.7K关注 0票数 3

我正在使用SP (Spring-SAML)和IDP (WSO2IS)测试单点登录。他们在浏览器上工作得很好。

现在我想把它带到一个Java独立应用程序中。提供用户凭据和SP URL后,用户即可登录应用程序并访问SP。要实现这一点,基本上我需要使用HTTPClient (用于处理Cookie、POST、重定向、自动POST),并遵循浏览器上发生的SAML消息流。

我想知道做这件事最有效的方法。有没有什么库或者例子?

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-08-26 13:45:51

我设法使用HtmlUnit headless浏览器创建了一个相对简单的解决方案。在我的例子中,我不得不从一个需要SAML身份验证的网站下载一个PDF文件。

代码语言:javascript
复制
import com.gargoylesoftware.htmlunit.UnexpectedPage;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;

...

private static byte[] samlAuthenticateAndDownloadFile(String url, String username, String password) throws Exception {
    byte[] fileBytes;
    try (final WebClient webClient = new WebClient()) {
      final HtmlPage loginPage = webClient.getPage(url);

      final HtmlForm loginForm = loginPage.getForms().get(0);

      final HtmlSubmitInput button = loginForm.getInputByName("login");
      final HtmlTextInput usernameField = loginForm.getInputByName("username");
      final HtmlPasswordInput passwordField = loginForm.getInputByName("password");

      usernameField.setValueAttribute(username);
      passwordField.setValueAttribute(password);

      final UnexpectedPage pdfPage = button.click();

      InputStream inputStream = pdfPage.getInputStream();

      fileBytes = IOUtils.toByteArray(inputStream);
    }

    return fileBytes;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27123260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档