1. 程式人生 > 其它 >Java伺服器獲取客戶端cpu、主機板相關引數

Java伺服器獲取客戶端cpu、主機板相關引數

技術標籤:javanode.js

功能需求為:在使用者登入時,判斷裝置是否已被允許。
剛開始的想法是在伺服器上做操作,就到目前為止也沒想出什麼好點的辦法,於是轉換思路,
把矛頭指向了客戶端。

想到兩種方案,1、通過ActiveX控制元件,2、通過node.js

ActiveX對於瀏覽器的支援,貌似只有ie同核心的瀏覽器才可以,所以選擇放棄。

node.js實現的思路

使用者傳送登入請求–》伺服器呼叫客戶端node.js服務
–》node.js獲取本機引數返回給伺服器–》完成認證

一些具體操作

1.安裝node.js環境,通過命令臺,node --version確認安裝是否正常。在這裡插入圖片描述
2.獲取cpu和主機板引數的一些cmd命令

# CPU序列號
wmic cpu get processorid
# 主機板序列號
wmic baseboard get serialnumber
# BIOS序列號
wmic bios get serialnumber

這裡我需要的只是這些,如果需要其他的可以自行百度。
3.通過node.js來執行這些命令列程式碼,獲取所需要的資料。

var http = require('http');
var nodeCmd = require('node-cmd');
var cpuId = '';
var mainId = '';

nodeCmd.get(
        'wmic cpu get processorid'
, function(err, data, stderr){ cpuId = data.toUpperCase().substring(11).trim(); } ); nodeCmd.get( 'wmic baseboard get serialnumber', function(err, data, stderr){ mainId = data.toUpperCase().substring(12).trim(); } ); http.createServer(function (request,response) {
response.writeHead(200,{'Content-Type': 'text/plain'}); response.end(cpuId+'&&'+mainId); }).listen(8888);

這個時候你在命令列控制檯內執行該檔案,通過瀏覽器訪問就能得到你想要得結果了。
擔心自動關閉,或者使用者重啟後服務停止,可以將該程式註冊服務,設定自動啟動即可。

4.關於後臺java程式碼
後臺controller可以通過HttpServletRequest來獲取訪問者的ip,網上相關程式碼很多,可直接複製。

		String ip =null;
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("X-Forwarded-For");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}
		if (ip != null) {
			//對於通過多個代理的情況,最後IP為客戶端真實IP,多個IP按照','分割
			int position = ip.indexOf(",");
			if (position > 0) {
				ip = ip.substring(0, position);
			}
		}

獲取到ip後,就可以通過httpClient或者restTemplate來進行服務呼叫。

 restTemplate.getForObject("http://" + ip + ":" + nodePort, String.class);

nodePort為客戶端node.js服務的埠號。
獲取到返回資料後,就執行自己的相關認證操作就好了。
大體思路是這樣,如果能用到,細節自己根據業務補充。要是能有不操作服務端裝置的方法話,快快留言~