使用Apache HttpClient突破J2EE站点认证

商业性 Web 站点大都提供站点认证功能以保护某些受限资源,HTTP 协议和 J2EE 规范对 Web 站点的认证过程都已有了详尽的定义,常见浏览器都能根据相应协议提供对应的界面形式帮助用户完成站点的认证过程。但在某些情况下,我们需要编写程序直接获取站点的受保护资源,在这类情况下,就不能利用浏览器给定的界面去完成认证,而需要我们根据不同的协议人工地发送相应请求以完成整个认证过程。本文根据这种需求给出一个基于 Apache HttpClient 应用包的解决方案。

J2EE 站点认证简介

出于安全性的需要和用户授权管理的考虑,常见的 J2EE 站点对特定资源都会加入认证/授权机制。例如一个公网上的论坛,一个只对特定用户开放的 RSS 或 Atom Feed,这些资源都必须在确信访问者为被授权用户时才能向访问者开放。为了实现这样的功能,J2EE 站点通常会采用某种站点认证机制,其中常见的有 HTTP Basic 认证和 J2EE Form-Based 认证。

HTTP Basic 认证

HTTP Basic 认证是 HTTP 认证协议(rfc2617)所定义的标准认证方式。要求 HTTP Basic 认证的服务器会在客户端访问受保护资源时向客户端发出请求,要求客户端上传用户名和密码对。服务器在收到用户名/密码并验证通过后,才将保护资源的内容返回给客户端。它的工作机制如下图:

图 1. HTTP Basic 认证原理

由于是 HTTP 规范,因而常见的浏览器,如 Internet Explorer,Mozilla Firefox,在 步骤 2 中收到服务器对用户名和密码的请求时会弹出认证对话框,供用户输入用户名/密码。

图 2. Firefox 在收到步骤 2 中请求时弹出的用户名/密码输入框

HTTP Basic 认证方式使用 base64 编码方式传送用户名和密码,而 base64 仅仅是一种公开的编码格式而非加密措施,因而如果信道本身不使用 SSL 等安全协议,用户密码较容易被截获。

时间: 2024-11-16 09:58:28

使用Apache HttpClient突破J2EE站点认证的相关文章

Apache配置基于加密的认证https加密证书访问

 这里简单演示一下Apache下基于加密的认证访问----https加密方式访问. 1.DNS解析解析情况: [root@localhost html]# nslookup www.downcc.com Server:         192.168.2.115 Address:        192.168.2.115#53 Name:   www.downcc.com Address: 192.168.2.115 2.安装Apache SSL支持模块:# yum install -y mod

配置Apache及实现多站点

  配置Apache及实现多站点 安装好Apache以后,可以在浏览器中输入http://localhost测试,如果配置正常会显示it's/ Working. 更改第一个站点的根目录:在文件Apache2.2confhttpd.conf中查找 DocumentRoot 属性,将后面的路径改为你的主站点的路径,如:D:wwwweb1 为第二个Apache服务建立配置文件:复制并重命名httpd.conf为web2.conf(举个例子而已,也可以叫my.conf等等),修改web2.conf中的L

Apache HttpClient 没有设置time out导致应用长时间阻塞的问题

update 2014-5-18: 今天又处理了一个HttpClient阻塞的问题,还是socket read没有超时设置. 用jstack -l pid 得到线程的调用栈,每隔一段时间执行一次,对比三次的thread dump结果,发现有一个线程是三次执行的位置一样的,说明它是阻塞在这里了: "org.springframework.jms.listener.DefaultMessageListenerContainer#7-1" prio=10 tid=0x00007f345127

dreamweaver 站点-dreamweaver+apache+php+mysql建站点

问题描述 dreamweaver+apache+php+mysql建站点 请问dreamweaver cs6如何建站点以及服务器怎么配置?相关具体路径怎么写?求解答. 解决方案 推荐你使用wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b,这是一款集成软件,包含了Apache,MySQL和php,安装可以直接使用,在安装时它会要求你把这三个软件分别安装的 解决方案二: 推荐用架构,python的django就符合你这个要求

Apache HttpClient中循环重定向的bug详解

在Apache HttpClient 4.0里有个循环重定向的bug,当服务器试图正常的从域名A跳转到B的时候就会发生(我是在 111cn.net 跳 www.111cn.net 的时候发现的),换过最新版也发现还是有这个问题. 跟踪了DefaultRequestDirector.java之后发现,它在内部创建了一个HttpRedirect对象来处理重定向,这个对象会重用你之前的HttpGet对象里的HTTP 头,导致这个bug的根源在于,连Host头也用了,这表示重定向到的新域名如果和老域名如

Win2003完美配置Apache+IIS+Tomcat多站点

apache|iis|站点 本来以为上一次的配置就搞定了,结果本地测试好好的,到了服务器上调试就完蛋了,本地只测试了一个asp站和一个jsp站,而实际情况是多个asp站和jsp站,又试了两次还是不行,终于在第三次尝试后搞定了,写下来做个纪念. 第一次尝试使用: <VirtualHost *:80>ServerAdmin feifei0658@sina.comServerName www.5hope.comDcumentRoot "G:\5hopeDirectoryIndex inde

Apache服务器攻略 用户认证简单配置方案集

Apache是目前流行的Web服务器,可运行在linux.Unix.Windows等操作系统下,它可以很好地解决"用户名+密码"的认证问题.Apache用户认证所需要的用户名和密码有两种不同的存贮方式:一种是文本文件:另一种是MSQL. Oracle.MySQL等数据库.下面以Linux的Apache为例,就这两种存贮方式,同时能对Windows的 Apache用户认证作简要的说明.下面我们来介绍下通过文本认证而实现的方式. 建立用户的认证授权需要三个步骤: 1.建立用户库 2.配置服

Apache搭建多个站点方法详解

最平常的大概有3种方法. 第一种:单IP不同端口 第二种:多IP同端口(独立IP的虚拟空间) 第三种:域名绑定根目录的方式(共享IP的虚拟空间) Apache的核心配置文件名是"httpd.conf",其所存放的路径在Apache目录下的conf文件夹下.修改它只需要使用记事本(建议使用其他编辑器,带行数的那种,方便修改),生效的话只需要保存httpd.conf,重启apache即可. 下面多站点支持的话,修改httpd.conf的第187~264行(不同的httpd.conf可能有差

Apache配置多个站点的方法

第一步:新建配置文件 新建一个配置,在httpd.conf所在目录下copy多一个http.conf文件,重命名为newsite.conf.(当然你想取个更好听的名字也ok啦) 第二步:修改配置文件 打开newsite.conf.找到DocumentRoot的那行,后面的地址改一下,改成你站点的所在目录,如:D:/Intepub/newsite,改完之后就是成这样子了DocumentRoot " D:/Intepub/newsite" 接下来还要再改一下,搜索一下Directory,找