獲取登入域帳號資訊方式之 —-IIS(VB)
前言
之前總結過一篇在Java 的Web 專案中獲取客戶端帳號資訊的文章。參見以上鍊接的內容。
除了那些方式之外, 還可以使用IIS 和VB 來獲取客戶端域帳號資訊。
(這裡介紹的使用場景還是在Java web 專案中使用IIS 和VB 的方式來獲取域帳號資訊。)
實際使用場景
環境狀況
1. Java web 專案, 部署在 機器A 的tomcat 上(不在域)
2. IIS 伺服器, 在機器B 上(在域上)
3. 客戶端機器都在域內,客戶端訪問Java web 專案.
要實現的功能是:
在Java web 專案中, 可以自動獲取客戶端的域登入使用者名稱。
實現思路
實現的思路就是使用IIS 和VB ,
web project root url: http://webprjurl
IIS root url: http://iisrooturl
1. 在IIS 中建立一個 aspx 和 aspx.vb 檔案, 用於獲取 客戶端帳號。
以 response.write 的方式 一個 iframe, src 為 http://webprjurl/ADLoginFrame.jsp?username=XX
2. 在web 專案的jsp 檔案中嵌入一個 iframe, iframe 的src 是 以上的IIS的url
http://iisrooturl/getADUser.aspx
3. 在 jsp 的 body 的onload 中, 讀取 iframe的src, 解析出 username
特別需要說明的部分:
你可能會問, 在以上步驟 1 中,既然已經取得帳號資訊, 是否之間呼叫iframe parent 的js 是否就可以設定帳號資訊了呢?
為什麼還要整兩個 iframe?
原因是: IIS 和 Web 可能在不同的域下,使用iframe 的parent 的方式就相當於在IIS 中訪問tomcat , 涉及到js 的跨域訪問,是會別禁止掉的。
所以使用兩個iframe 避免跨域訪問出現的問題。
實際例子程式碼:
1. IIS 中 getADUser.aspx 和 getADUser.aspx.vb
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="getADUser.aspx.vb" Inherits="AdminADUser" %>
Partial Class AdminADUser
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Response.Write("<iframe src='http://webprjurl/ADLoginFrame.jsp?username="+Request.ServerVariables("LOGON_USER")+"'></iframe>")
Me.Response.end
End Sub
End Class
2. Java web 中 ADLoginFrame.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script>
window.onload = function(){
var text = window.location.href.split('=')[1]
//console.log(parent.parent)
parent.parent.setADDomainUser(text);
}
</script>
</head>
<body>
</body>
</html>
3. Java web 中的 getLoginInfo.jsp
這是呼叫的主頁面, 上面window.onload 中的 parent.parent 對應到的就是這個頁面。
<body>
<iframe id="loginADFrame" src="http://iisurl/getADUser.aspx"></iframe>
</body>
總結
以上方法在IE 和 Chrome 中使用是正常的,但是在firefox 下,會彈出輸入域帳號的資訊的對話方塊, 這個問題在之前的一篇也提到過。