1. 程式人生 > >獲取登入域帳號資訊方式之 —-IIS(VB)

獲取登入域帳號資訊方式之 —-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 下,會彈出輸入域帳號的資訊的對話方塊, 這個問題在之前的一篇也提到過。