【STEP1】
使用PostgreSQL的客戶端pgAdmin登錄數據庫,做成用戶認證表。字段名和表名任意,如
1 CREATE TABLE usrinfo
2 (
3 userid character varying NOT NULL,
4 passwd character varying NOT NULL,
5 CONSTRAINT usrinfo_pk PRIMARY KEY (userid)
6 )
7
【STEP2】
由于使用Apache的mod_authn_dbd進行用戶登錄認證的時候,要求用戶密碼必須使用密文保存。這里我們使用Apache的commons-codec來加密密碼明文。
1 String inpasswd = "test";
2 String passwd = "{SHA}" + Base64.encodeBase64String(MessageDigest.getInstance("SHA1").digest(inpasswd.getBytes()));
【STEP3】
為了之后Apache的mod_authn_dbd模塊可以找到數據庫的驅動,需要將PostgreSQL的驅動添加到LIBARAY_PATH中。由于操作系統是Redhat Enterprise Server 5,所以采用的方式是,在/etc/ld.so.conf.d目錄下建立apr-util-httpd-1.2.conf這個文件,其中添加數據庫驅動的路徑。
※ 不知道數據庫驅動的路徑的話,可以使用find命令查找。
find / -name libpq.so
【STEP4】
下載Apache Http Server 2.2進行編譯、安裝。可以在客戶端下載后,用sftp傳到服務器上,也可以使用wget命令從internet上獲取。
tar zxvf httpd-2.2.17.tar.gz
【STEP5】
為了使用mod_authn_dbd模塊,首先必須安裝apr框架。另外,Apache2.2.x要求apr的版本為1.2,如果服務器上已經存在apr 1.1的話,需要升級為1.2。在Apache2.2.x的configure如果指定了如下參數好像可以直接安裝apr,但這次我們是分別安裝apr和Apache Http Server。
--enable-dbd --enable-authn-dbd --with-pgsql=/usr/local/pgsql
【STEP6】
進入httpd-2.2.17/srclib/apr目錄,安裝apr框架。
1 ./configure --prefix=/usr/local/apr-httpd/
2 make
3 make install
【STEP7】
安裝apr-util 1.2。
1 ./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/ --with-pgsql=/usr/local/pgsql
2 make
3 make install
一般地,/usr/local/pgsql是PostgreSQL數據庫安裝的HOME目錄。如果不在這個目錄下面的話,可以使用find / -name pgsql來查找名為“pgsql”的目錄。可能找到若干個,PostgreSQL數據庫安裝的HOME目錄的特征是下面包含data/base和data/global兩個目錄。
【STEP8】
安裝Apache Http Server。
1 "./configure" \
2 "--prefix=/usr/local/apache22/" \
3 "--with-apr=/usr/local/apr-httpd/" \
4 "--with-apr-util=/usr/local/apr-util-httpd/" \
5 "--enable-rewrite=shared" \
6 "--enable-ssl" \
7 "--enable-proxy" \ <-- 因為之后要做到Tomcat的轉發,所以加入proxy功能
8 "--enable-vhost-alias" \
9 "--enable-dbd" <-- 認證功能必須
10 "--enable-authn-dbd" <-- 認證功能必須
11 make
12 make install
※可以使用./configure --help來查看支持的參數。
【STEP9】
下面就可以啟動WEB服務器,看服務器是否可以正常運行。
1 cd /usr/local/apache22/bin
2 ./apachectl start
3 ps –ef | grep httpd <-- 查看服務是否啟動
使用瀏覽器訪問地址,如果出現“It Works!”表明已經安裝好。
【STEP10】
停止服務器,修改conf/http.conf文件。
./apachectl stop
【httpd.conf】
1 …
2 #Database Management
3 #Use the PostgreSQL driver
4 DBDriver pgsql
5
6 #Connection string: database name and login credentials
7 DBDParams "host=192.168.0.75 dbname=postgres user=test password=test"
8
9 #Parameters for Connection Pool Management
10 DBDMin 1
11 DBDKeep 2
12 DBDMax 10
13 DBDExptime 60
14
15 #Authentication Section
16 <Location "/">
17
18 #mod_auth configuration for authn_dbd
19 AuthType Basic
20 AuthName "mongoose"
21 AuthBasicProvider dbd
22
23 #authz configuration
24 Require valid-user
25
26 #SQL query to verify a user
27 #(note: DBD drivers recognise both stdio-like %s and native syntax)
28 AuthDBDUserPWQuery "select passwd from userinfo where userid = %s"
29
30 </Location>
31 
【STEP11】
再次啟動服務器,訪問WEB服務器后,就會彈出要求登錄的對話框,輸入數據庫中保存的用戶名和密碼后,應該可以正常登錄了。
【STEP12】
之后為了連接Tomcat,在http.conf中加入
ProxyPass / ajp://localhost:8009/
此時,所有對Apache Http Server的請求都會轉發給Tomcat,而Apache Http Server就作為一個前端認證的服務器使用。另外,在Tomcat的JSP中,使用request.getRemoteUser還可以取到登錄的用戶名。