【问题标题】:java http authentication reuse between servletsservlet之间的java http认证重用
【发布时间】:2012-04-03 10:41:52
【问题描述】:

不确定如何正确提出问题。

我有两个 web 应用:A 带有一个 servlet,B 带有两个 servlet,两者都受 web.xml 中的基本身份验证保护(部署到 weblogic 服务器)。

用户使用浏览器本地登录/密码窗口(由 weblogic 管理)向 A 和 B 的其中一个 servlet 进行身份验证(不确定我在这里所说的是否完全是垃圾)。

但是,应用程序 A 的 servlet 也应该调用 B 的另一个 servlet,这也需要身份验证。

问题是:可以避免吗?用户已经对这两个网络应用程序进行了身份验证,所以我想以某种方式重用这个身份验证(我真的不擅长所有这些 http 会话术语,不要向我扔石头:))。

似乎不能使用cookies,因为它实际上是服务器端通信。

【问题讨论】:

    标签: java http authentication servlets


    【解决方案1】:

    以下应该可以解决问题:

    1. 创建javax.servlet.Filter,它从请求中提取 jsessionid 并以某种方式为每个用户存储它(在我的情况下,我将它作为 details 放入 org.springframework.security.core.Authentication,确保此过滤器在 spring-security 的过滤器之后运行)。

    2. 将其作为 cookie 标头添加到每个 servlet-servlet 请求中:

      org.apache.commons.httpclient.HttpMethodBase.setRequestHeader("Cookie",
          "jsessionid="+org.springframework.security.core.Authentication.getDetails().toString()); 
      

      在适当的地方。

    【讨论】:

      【解决方案2】:

      在应用 A 的 servlet 代码中执行此操作:

      URLConnection conn = new URL("http://hostname/appB/servlet1");
      String authorizationHeader = request.getHeader("authorization");
      if (null != authorizationHeader) {
          conn.setRequestProperty("authorization", authorizationHeader);
      }
      InputStream inStream = conn.getInputStream();
      //Read from inStream in the usual way
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-30
        • 2011-08-16
        • 2012-06-26
        • 2015-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多