如何實現web專案單機部署

2021-09-02 17:06:26 字數 1704 閱讀 1799

[list][*][b]實現目標[/b][/list]

實現專案部署包僅能在指定伺服器部署,不可更改。更換位置,無法正常啟動和訪問。目前還沒有完美的解決方案,有些思路還待驗證。

[list][*][b]實現方案[/b][/list]

[b]校驗規則[/b]

校驗當前伺服器mac位址是否匹配

[b]啟動報錯提示[/b]

方案1:自定義servlet,load-on-startup設定為0,在init方法中校驗

方案2:定義servletcontextlistener,在contextinitialized方法中校驗

可考慮在校驗失敗的情況下刪除專案檔案。該方案通過修改配置檔案,從而遮蔽掉校驗,安全級別不高

[b]禁止非指定server部署訪問[/b]

為了禁止非指定server部署訪問,可在action層、service層進行校驗,校驗失敗返回狀態資訊。

action層校驗:aop實現,cglib動態**,@before中進行校驗,校驗失敗拋出自定義異常,配置自定義異常友好提示頁面。但是像啟動報錯提示一樣,也可通過修改配置檔案遮蔽校驗,且不影響使用,安全級別不高。

service層校驗:**實現(靜態**、jdk**、cglib**),靜態**需要很多**類,後兩者需要使用spring整合,因為如果專案已使用**(例如事務、日誌),自定義**類實際**的是spring已**後的類,無法**成功(不知道是否特殊處理後可以,但明顯不是乙個好的方案)。和action層校驗一樣,也存在修改配置檔案遮蔽校驗的問題。

[b]最小硬編碼非配置檔案實現[/b]

在action層取消依賴注入機制,通過自定義factorybean間接獲取service層物件,校驗失敗捕獲異常。**如下:

public static object getbean(class cl) throws noasses***ceptionelse

return bean;

}

service呼叫:

helloworldservice helloworldservice=(helloworldservice)factorybean

.getbean(helloworldservice.class);

helloworldservice.helloworld();

因為使用了自定義異常,無法在action層作為私有屬性初始化service,只能在具體方法中初始化並捕獲異常,增加了類**量。好處在於明確問題原因,並給予友好提示。

改進方案:校驗時不丟擲異常,使其可作為變數定義,減少action層具體方法中重複獲取service物件。缺點在於異常狀態為空指標異常,無法給予友好提示。

缺點:1、改變了常用的依賴注入的物件呼叫方式;2、service層校驗需要過action層;3、反編譯原始碼後,也很容易全域性遮蔽掉校驗

[b]待驗證方案[/b]

以上方案安全級別都不高,以mac位址等對類檔案進行加密,自定義類載入器以當前server的mac進行解密,這樣是否會好一些。

需要解決的問題:1、如何自動進行類加密(工具類手動可以,希望有更好的方案);2、如何全域性引入自定義類載入器,最好可以整合在spring中。

接下來有空研究,以下兩篇classloader的文章可以參考:

[url]

[url]

[color=red]已驗證:未完美解決[/color]

[url]

如何在Tomcat上部署web專案

tomcat部署web專案有三種方式。doctype html html head meta charset utf 8 title 1024 筆記 title head body h1 1024 body html 將上面的 儲存為html檔案格式。出現 以下結果,則通過內嵌的方式在tomcat上...

Tomcat部署web專案

tomcat的目錄結構 tomcat根目錄在tomcat中叫,1.bin 存放各種平台下啟動和關閉tomcat的指令碼檔案。2.lib 在lib目錄下的lib目錄,存放tomcat伺服器和所有web應用都能訪問的jar。3.work tomcat把各種由jsp生成的servlet檔案放在這個目錄下。...

apache部署web專案

apache中經常會部署web專案,現記錄下來做備忘。部署方法 1.開啟安裝目錄下的conf目錄下的httpd.conf,找到 documentroot 節點,後面寫上要發布應用的目錄位址,如 d phpwork 再找到 directory 節點,在其後面也寫上應用的目錄位址。2.如果使用虛擬目錄,...