0

我已经通过在 web.xml 中粘贴下面的代码,为特定地址的基本身份验证配置了 apache tomcat web.xml

<security-constraint>
    <web-resource-collection>
      <web-resource-name> 
        Protected Site 
      </web-resource-name>
      <!-- This would protect the entire site -->
      <url-pattern> /Documents/* </url-pattern>
      <!-- If you list http methods, 
            only those methods are protected -->
      <http-method> DELETE </http-method>
      <http-method> GET </http-method>
      <http-method> POST </http-method>
      <http-method> PUT </http-method>
    </web-resource-collection>
    <auth-constraint>
      <!-- Roles that have access -->
      <role-name>role1</role-name>
    </auth-constraint>
  </security-constraint>

  <!-- BASIC authentication -->
  <login-config>
    <auth-method> BASIC </auth-method>
    <realm-name>Authentication </realm-name>
  </login-config>

  <!-- Define security roles -->
  <security-role>
    <description> Test role </description>
    <role-name>role1</role-name>
  </security-role>

我得到了用于获取用户名和密码的浏览器基本身份验证对话框。并且在正确的用户名和密码之后,我获得了身份验证并且能够查看文档,否则无法查看。

现在一切正常,但是“我想使用 Adob​​e flex 编程绕过此身份验证,即通过在 flex 代码中提供用户名 N 密码,我希望此对话框不应该出现,并且用户通过代码进行身份验证。”

4

2 回答 2

0

您无法在 Flex Web 应用程序中执行此操作。

只有 AIR 应用程序或移动应用程序才能做到 -

因为URLRequestHeader中的前者不允许使用以下标头:

  • 接受字符集,接受编码,接受范围,年龄,允许,允许,授权,收费,连接,连接,内容长度,内容位置,内容范围,Cookie,日期,删除,ETag,期望,获取,头,主机,If-Modified-Since,Keep-Alive,Last-Modified,位置,Max-Forwards,选项,来源,发布,代理认证,代理授权,代理连接,公共,放置,范围, Referer、Request-Range、Retry-After、Server、TE、Trace、Trailer、Transfer-Encoding、Upgrade、URI、User-Agent、Vary、Via、Warning、WWW-Authenticate、x-flash-version
于 2013-09-05T17:43:19.180 回答
0

您应该将身份验证标头添加到您的service:HTTPService对象。

import mx.utils.Base64Encoder;
private function addAuthenticationHeader(service:HTTPService):void
{
        var encoder:Base64Encoder = new Base64Encoder();
        encoder.insertNewLines = false;
        encoder.encode("django:reinhardt");
        service.headers = {Authorization:"Basic " + encoder.toString()};                                                
        service.send();
}

编辑:你想达到什么目的?

  • 您想在 Flex 中获取受保护 url 的结果
  • 您想以某种方式对用户进行身份验证,然后导航(更改浏览器 url)到受保护的页面?

我认为 1 是不可能的,因为基本身份验证 (BA) 不依赖于 cookie 或会话 ID。如果浏览器没有在每个受保护的页面上重新询问您的密码,这仅仅是因为它将 BA 标头存储在一个内部会话中,该会话不会在所有页面组件之间共享,尤其是对于 flash(出于明显的安全原因......)。

如果它是第二个选项,那么您应该使用包含所有内容https//django:reinhardt@localhost/myApp/Documents/mySecret.mp3并将由浏览器映射的此类 url。

HIH

于 2013-09-05T07:16:29.567 回答