浏览 2604 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-06-24
最后修改:2012-06-25
本案例是为一个中型规模的外包软件公司开发的WiFi网页认证系统。 <%@ 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步. 根据您的具体需要或业务,进行用户登录验证处理 //**************************************************** boolean loginSuccess = true; String username = request.getParameter("username"); // 用户名 String pswd = request.getParameter("pswd"); // 密码 String domain = request.getParameter("domain"); // Domain /* 进行输入参数的校验 */ if(username.equals("")) { out.print("用户名不可为空!<br>"); loginSuccess = false; } if(pswd.equals("")) { out.print("密码不可为空!<br>"); loginSuccess = false; } if(domain.equals("")) { out.print("Domain不可为空!<br>"); loginSuccess = false; } /* 域账户验证 */ if(loginSuccess == true) { String url = new String("ldap://" + host + ":" + port); String user = username.indexOf(domain) > 0 ? username : username +"@"+ domain; Hashtable<String, String> env = new Hashtable<String, String>(); DirContext ctx; env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, user); env.put(Context.SECURITY_CREDENTIALS, pswd); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, url); try { ctx = new InitialDirContext(env); ctx.close(); loginSuccess = true; } catch (NamingException e) { //e.printStackTrace(); loginSuccess = false; out.print("登录失败!"); // } } %> <br> </b></td></tr></table> <% if(loginSuccess == true) { //**************************************************** // 第2步. 调用Wiwiz Auth API,进行预认证 // 重要: 请在服务器端的程序中进行此处理(例如,ASP、C#、JSP/Servet、PHP...), // 而不要在直接客户端代码中进行此处理(例如,HTML/Javascript) //**************************************************** // 参数 "action" : 必须! // 设置为"1"将使用户认证成功 // 设置为"1"将使用户认证失败 String action = "1"; // 参数 "tokencode": 必须! // 设置与同名传入参数相同的值 String tokencode = (String) session.getAttribute("tokencode"); // 参数 "srvurl": 必须! // 设置与同名传入参数相同的值 String srvurl = (String) session.getAttribute("srvurl"); // 参数 "endtime" : 可选 // 格式: yyyy-mm-dd hh:MM:ss 例如: 2012-05-31 21:39:00 // 设置此参数将使用户的Internet连接在指定时间关闭 // 注意: 对此参数的值必须进行url编码 String endtime = ""; //URLEncoder.encode("2012-05-31 21:39:00", "utf-8"); // 参数 "postauth" : 可选 // 例如: http://www.YourDomain.com // 设置此参数将设置用户在通过认证后显示的页面地址 String postauth = hrsys; String parameters = "wiwiz_auth_api=1&ver=1.0"+ // 参数 "wiwiz_auth_api" 与 "ver". 固定值 "&tokencode="+ tokencode + // 参数 "tokencode". 设置方法参考上面的说明 "&userkey="+ userkey + // 参数 "userkey". 设置方法参考上面的说明 "&action="+ action + // 参数 "action". 设置方法参考上面的说明 "&endtime="+ endtime + // 参数 "endtime". 设置方法参考上面的说明 "&postauth="+ postauth; // 参数 "postauth". 设置方法参考上面的说明 URL u = new URL(srvurl); // 使用传入参数"srvurl"的值作为请求地址 URLConnection uc = u.openConnection(); uc.setDoOutput(true); uc.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); PrintWriter pw = new PrintWriter(uc.getOutputStream()); pw.println(parameters); pw.close(); BufferedReader in = new BufferedReader( new InputStreamReader(uc.getInputStream())); String verifycode = in.readLine(); in.close(); if(verifycode.startsWith("ERR")) { // 如果报错,则显示错误代码 out.println("Error: "+ verifycode); } else { // 如没有报错则进行第3步。 //**************************************************** // 第3步. 调用Wiwiz Auth API,完成认证 //**************************************************** String redirectUrl = srvurl + // 使用传入参数"srvurl"的值作为跳转地址的前缀 "?wiwiz_auth_api_login=1"+ // 参数 "wiwiz_auth_api_login",固定值 "&tokencode="+ tokencode + // 参数 "tokencode",设置与同名传入参数相同的值 "&verifycode="+ verifycode; // 参数 "verifycode",设置与同名传入参数相同的值 response.sendRedirect(redirectUrl); // 最后,进行跳转 } } }%> </center> </body> </html> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |