使用Apache的mod_authn_dbd和PostgreSQL实施HTTP Basic登录认证

【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 还可以取到登录的用户名。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LoadFile modules/libz.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_dbd_module modules/mod_authn_dbd.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule file_cache_module modules/mod_file_cache.so LoadModule cache_module modules/mod_cache.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so LoadModule dbd_module modules/mod_dbd.so LoadModule dumpio_module modules/mod_dumpio.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule include_module modules/mod_include.so LoadModule filter_module modules/mod_filter.so LoadModule substitute_module modules/mod_substitute.so LoadModule deflate_module modules/mod_deflate.so LoadModule log_config_module modules/mod_log_config.so LoadModule log_forensic_module modules/mod_log_forensic.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule cern_meta_module modules/mod_cern_meta.so LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so LoadModule ident_module modules/mod_ident.so LoadModule usertrack_module modules/mod_usertrack.so LoadModule unique_id_module modules/mod_unique_id.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule mime_module modules/mod_mime.so LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule asis_module modules/mod_asis.so LoadModule info_module modules/mod_info.so LoadModule cgi_module modules/mod_cgi.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule imagemap_module modules/mod_imagemap.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值