日期:2014-05-17  浏览次数:20907 次

基于Windows活动目录的无线网络Web认证(JSP实现)
本案例是为一个中型规模的外包软件公司开发的WiFi网页认证系统。

整个公司的网络都是采用典型的Windows活动目录(Active Directory)进行管理,所有员工都分配有各自的域账户。员工的计算机都是有线连接,因为主要做的是外包项目,信息安全方面要求很严格,所以公司规定一般的员工不能上网。
现在公司希望在每一层都能为员工提供无线WiFi上网的方式(非办公用),但是也需要用域账户进行认证,而且要用Web认证(可以防止WiFi万能钥匙这类手机软件)。

我们采用的方式非常简单,即,在每一层都安装一个无线路由器,WAN口接入公司网络(非办公用网段)并连接外网。无线路由器统一刷DD-WRT,安装Wiwiz客户端。

然后在公司内网的Java服务器中增加一个我们写的JSP页面,用于Web认证。
重点就在这个JSP页面程序,这里简要说明一下。
这个JSP页面程序接收来自无线网络用户提交的域名、用户名和密码,然后连接域控制器,进行域账户的验证,如果出错则报错。如果域账户验证通过,则调用Wiwiz Auth API使之完成Web认证。认证通过后,浏览器将自动显示公司内网主页。

简易版的效果图如下:



以下是Web认证页面的JSP程序源码:
Java code

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.net.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.naming.directory.*"%>

<%
String userkey = "XXXXXXXXXXXXXXXX";    // 替换为你的User Key
String host = "XXX.XXX.XXX.XXX";         // AD服务器地址
String port = "389";                     // AD服务器端口
String hrsys = "http://hrsys";            // 公司内网系统首页地址,用于认证后显示

//****************************************************
// 取得接收到的传入参数
//****************************************************
 
String pTokencode = request.getParameter("tokencode");    // 接收到的传入参数"tokencode"
String pSrvurl = request.getParameter("srvurl");        // 接收到的传入参数"srvurl"
 
 
/* 如必要,把传入参数存放于Session对象中 */
if(pTokencode != null)
    session.setAttribute("tokencode", pTokencode);
if(pSrvurl != null)    
    session.setAttribute("srvurl", pSrvurl);
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="zh">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<title> 用户认证 </title>
</head>
<body>
<center>
<br>

<form action="" method="post">

<b>请使用公司的域账户进行认证</b>
<br><br>
<table bgcolor="#eefffff" border="0" cellspacing="1" cellpadding="6" width="350">
<tr>
<td align="right">Domain:</td> <td><input type="text" name="domain" value="<%=request.getParameter("domain") == null ? "" : request.getParameter("domain")%>" /></td>
</tr>
<tr>
<td align="right">用户名:</td> <td><input type="text" name="username" value="<%=request.getParameter("username") == null ? "" : request.getParameter("username")%>" /></td>
</tr>
<tr>
<td align="right">密码:</td> <td><input type="password" name="pswd" /></td>
</tr>
</table>


<br>
<input type="submit" name="login" value="  登录  " onclick="history.back();">
</form>

<%if(request.getParameter("login") != null) { 
/* “登录”按钮按下时 */
%>

<table width="260" bgcolor="#888888" border="0" cellspacing="1" cellpadding="8"><tr><td bgcolor="#ffff99" align="center" valign="middle">
<b>

<%
    //****************************************************
    // 第1步. 根据您的具体需要或业务,进行用户登录验证处理
    //****************************************************
 
    bool