金蝶容器运维指南
金蝶容器介紹
? 在進(jìn)行28所項(xiàng)目的時(shí)候,由于項(xiàng)目國產(chǎn)化的需要,因此AI服務(wù)器在開發(fā)的過程中必須使用Tomcat、Jetty、Undertow等容器的國產(chǎn)化替代產(chǎn)品,因?yàn)閲业恼叻ㄒ?guī)已經(jīng)將信息安全問題上升到國家的高度,在項(xiàng)目開發(fā)過程中使用的產(chǎn)品必須是自主可控、而且源代碼安全的。
? 金蝶Apusic應(yīng)用服務(wù)器 AAS是應(yīng)用系統(tǒng)的運(yùn)行平臺(tái),為應(yīng)用系統(tǒng)提供便捷開發(fā)、靈活部署、可靠運(yùn)行、高效管理及快速集成等關(guān)鍵支撐。支持Java企業(yè)級(jí)規(guī)范和主流應(yīng)用框架,廣泛應(yīng)用于電子政務(wù)和企業(yè)核心關(guān)鍵應(yīng)用。
? 28所項(xiàng)目、AI服務(wù)器、以及未來的大船項(xiàng)目中,均會(huì)采用相同的國產(chǎn)化形態(tài)軟件,AAS+國產(chǎn)化數(shù)據(jù)庫的應(yīng)用結(jié)構(gòu)來進(jìn)行開發(fā),因此結(jié)合28所項(xiàng)目、所里AI服務(wù)器項(xiàng)目的金蝶容器使用實(shí)踐,總結(jié)以往的經(jīng)驗(yàn),溫故而知新。把相關(guān)金蝶容器的使用經(jīng)驗(yàn)記錄如下。
AAS架構(gòu)
技術(shù)白皮書
金蝶容器技術(shù)白皮書
應(yīng)用場(chǎng)景
? 電子政務(wù)系統(tǒng)、電子商務(wù)系統(tǒng)、企業(yè)CRM系統(tǒng)等JavaEE應(yīng)用都需要使用JavaEE應(yīng)用服務(wù)器。
安裝包目錄結(jié)構(gòu)
目錄結(jié)構(gòu)
較為重要的由兩個(gè)文件夾,一個(gè)是根目錄下的文件夾,只要能夠較為熟悉的了解兩層目錄中文件夾和文件的基本含義,即可對(duì)容器有初步的理解并且使用。
Apusic應(yīng)用目錄結(jié)構(gòu)
? 在Apusic應(yīng)用目錄結(jié)構(gòu)中較為重要的文件夾為domains文件夾,該文件中包含用戶通過bin/config創(chuàng)建的自定義域。我們可以把自己制作的war包或者文件見部署在domains**self-defined-domain**中。
應(yīng)用程序部署在APUSIC_HOME\domains\self-defined-domain\applications\目錄下,如果不創(chuàng)建自定義域則放置在APUSIC_HOME\domains\mydomain\applications\
應(yīng)用目錄結(jié)構(gòu)中的具體作用如下表所示
| 目錄 | 內(nèi)容 |
|---|---|
| adminconsole | Apusic管理控制臺(tái)運(yùn)行所需文件,如果使用的安裝包包含adminconsole,則安裝完后adminconsole在此目錄中 |
| bin | 一些命令行腳本,通常,您需要修改其中setenv.cmd(setenv)文件,將其中JAVA_HOME設(shè)置為正確的JVM所在目錄 |
| classes | 服務(wù)器運(yùn)行時(shí),會(huì)將此目錄置為系統(tǒng)CLASSPATH最前端,默認(rèn)情況下,此目錄為空 |
| common | 服務(wù)器運(yùn)行時(shí),會(huì)將此目錄中的jar包(含zip)置于系統(tǒng)CLASSPATH中,位于sp目錄中的jar包之后,lib目錄中的jar包之前 |
| lib | 服務(wù)器運(yùn)行時(shí),會(huì)將此目錄中的jar包(含zip)置于系統(tǒng)CLASSPATH中,位于common目錄中的jar包之后 |
| sp | 補(bǔ)丁程序所在位置,服務(wù)器運(yùn)行時(shí),會(huì)將此目錄中的jar包(含zip)置于系統(tǒng)CLASSPATH中,位于classes目錄之后,common目錄中的jar包之前; 默認(rèn)情況下,此目錄為空 |
| domains | Apusic應(yīng)用服務(wù)器的域,見[下表](file:///C:/Users/宋姍姍/Desktop/宋姍姍/AAS-V9.0_2019-1-7/readme.html#table2)。 |
| src | 一些第三方j(luò)ar包的源碼包 |
| templates | 創(chuàng)建domain時(shí)所用到的模板 |
| tools | 包含管控api文檔,以及工具腳本和readme.txt說明文檔 |
注意:在tools文件中包含了許多的非交互式腳本,用來簡(jiǎn)化AAS容器的全局配置。
tools非交互式腳本介紹
域目錄結(jié)構(gòu)
? Apusic應(yīng)用服務(wù)器的域信息保存在APUSIC_HOME/domains目錄下,每個(gè)域的信息保存在同名的子目錄中,安裝服務(wù)器后domains目錄下包含預(yù)定義的mydomain域。mydomain中的子目錄及子目錄描述如下表:
| 目錄 | 內(nèi)容 |
|---|---|
| applications | 凡放到此文件夾中的ear、war、rar等符合J2EE規(guī)范的文件或文件夾,都會(huì)被自動(dòng)部署到Apusic應(yīng)用服務(wù)器上 |
| bin | 一些命令行腳本,通常,您需要運(yùn)行其中startapusic.cmd(startapusic)腳本來啟動(dòng)Apusic應(yīng)用服務(wù)器 |
| config | 服務(wù)器中的數(shù)據(jù)庫連接池、web服務(wù)器、JMS服務(wù)、日志服務(wù)等相關(guān)配置文件、負(fù)載均衡示例配置文件等 |
| deploy | 服務(wù)器從未運(yùn)行過時(shí),此目錄不存在,當(dāng)服務(wù)器啟動(dòng)以后,會(huì)自動(dòng)創(chuàng)建此文件夾。此文件夾中放置了應(yīng)用系統(tǒng)運(yùn)行時(shí)所產(chǎn)生的一些中間過程文件,譬如,由jsp文件生成的servlet等 |
| lib | 允許用戶在這里放置一些公用的jar包(譬如數(shù)據(jù)庫JDBC Driver等),此文件夾中的jar包(含zip)會(huì)自動(dòng)置于系統(tǒng)CLASSPATH的尾部 |
| logs | 服務(wù)器日志文件 |
| store | 系統(tǒng)用戶存儲(chǔ)文件,JMS消息存儲(chǔ)文件等 |
? APUSIC_HOME/domains目錄下還包含預(yù)定義的samples域,samples域預(yù)部署了若干個(gè)示例應(yīng)用,用以演示JavaEE5的最新技術(shù)。samples域的目錄結(jié)構(gòu)與mydomain基本一致,但多了一個(gè)src目錄,存放示例應(yīng)用的源代碼及構(gòu)建腳本。
證書
? 由于AAS的運(yùn)行是付費(fèi)的,因此必須從金蝶獲取符合時(shí)間的證書,當(dāng)前可用的證書如下:
<?xml version="1.0" encoding="UTF-8"?>
<license/>
把該證書置于根目錄下即可
\AAS-V9.0_2019-1-7
若證書時(shí)間過期,則在運(yùn)行時(shí)會(huì)彈出如下的問題:
Linux管理
? 金蝶容器與Tomcat容器一樣,zip安裝包支持Windos和Linux環(huán)境下運(yùn)行。在啟動(dòng)運(yùn)行程序時(shí),在mydomains\applications文件夾中
在上述的行文以及下述的行文中,并不創(chuàng)建自定義域,而僅僅使用預(yù)先安裝的mydomain域來演示程序。
使用如下的腳本來控制應(yīng)用程序的啟停。
由于Windows和Linux端應(yīng)用程序的管理別無二致,Linux端金蝶的使用是日后工作的重點(diǎn),因此如下使用Linux端來演示應(yīng)用程序的啟停管理
配置應(yīng)用端口
我們可以采用如下的方式創(chuàng)建一個(gè)新的域,較為重要步驟是要確定域監(jiān)聽的的端口和SSL端口。
創(chuàng)建域使用config腳本,該腳本位于APUSIC_HOME\config,其他以默認(rèn)方式執(zhí)行即可。該行命令執(zhí)行完畢,則可以在APUSIC_HOME\domains目錄下看見自定義的域。
windos環(huán)境創(chuàng)建域
C:\Users\AAS-V9.0_2019-1-7\bin>config.cmd
Using APUSIC_ENDORSED_DIRS: C:\Users\AAS-V9.0_2019-1-7\lib\endorsed-----------------------------------------------------------
| 歡迎進(jìn)入Apusic域配置向?qū)? |
| 版本 :Apusic Application Server 9.0 |
| |
| 深圳市金蝶中間件有限公司 |
| 版權(quán)所有 |
-----------------------------------------------------------選擇任務(wù) ...
------------您希望執(zhí)行下面的哪一個(gè)任務(wù)?1- 創(chuàng)建一個(gè)新的Apusic域2- 刪除一個(gè)現(xiàn)有的Apusic域3- 構(gòu)建一個(gè)新的Apusic域模板請(qǐng)選擇相應(yīng)的數(shù)字: 1歡迎進(jìn)入域創(chuàng)建向?qū)е行?----------------------該向?qū)?huì)幫助您創(chuàng)建一個(gè)全新的Apusic域,同時(shí)也會(huì)在您的計(jì)算機(jī)上創(chuàng)建一些相關(guān)文件和需要的目錄.按<ENTER>鍵繼續(xù):選擇域來源 ...
--------------選擇將要?jiǎng)?chuàng)建的域的來源.您能夠指定一個(gè)域模板來創(chuàng)建域,也可以不使用域模板創(chuàng)建域.->1- 選擇系統(tǒng)默認(rèn)模板2- 選擇自定義模板請(qǐng)選擇相應(yīng)的數(shù)字,或按<ENTER>鍵接受默認(rèn)選擇:1選擇系統(tǒng)默認(rèn)模板 ...
--------------------標(biāo)準(zhǔn)模板與集群模板的區(qū)別是: 基于集群模板創(chuàng)建的domain擁有集群服務(wù)。->1- 標(biāo)準(zhǔn)2- 集群請(qǐng)選擇相應(yīng)的數(shù)字,或按<ENTER>鍵接受默認(rèn)選擇:1域配置 ...
----------您想在哪一位置安裝該域?
默認(rèn)位置 = C:\Users\AAS-V9.0_2019-1-7\domains請(qǐng)輸入一個(gè)絕對(duì)路徑,或按<ENTER>鍵接受默認(rèn)位置安裝路徑:請(qǐng)為該域輸入一個(gè)有效的名稱,域名稱是該域的有效標(biāo)識(shí).已存在的域名稱:1- mydomain域名稱: sqh服務(wù)器配置 ...
--------------設(shè)置服務(wù)器監(jiān)聽端口
默認(rèn)端口 = 6888請(qǐng)輸入您的服務(wù)器監(jiān)聽端口,按<ENTER>鍵接受默認(rèn)選擇監(jiān)聽端口 : 8888設(shè)置服務(wù)器SSL安全監(jiān)聽端口
默認(rèn)端口 = 6889請(qǐng)輸入您的服務(wù)器SSL安全監(jiān)聽端口,按<ENTER>鍵接受默認(rèn)選擇SSL監(jiān)聽端口 : 7888高級(jí)選項(xiàng)配置 ...
----------------這里將會(huì)幫助您繼續(xù)進(jìn)行數(shù)據(jù)源配置,J2EE應(yīng)用程序配置.
默認(rèn)選擇 = 否請(qǐng)選擇,或按<ENTER>鍵接受默認(rèn)選擇是否希望配置一些高級(jí)選項(xiàng)? (Y|N):請(qǐng)稍后...
---------..................................................................................................................................................................................您所選擇的任務(wù)成功執(zhí)行完畢.
Linux創(chuàng)建域
root@sqh-virtual-machine:/usr/local/aas/bin# ./config-----------------------------------------------------------
| Welcome to Apusic Domain Configuration Wizard |
| Version :Apusic Application Server 9.0 |
| |
| Copyright 2006 ShenZhen Kingdee Middleware Inc. |
| All rights reserved |
-----------------------------------------------------------Select Task ...
---------------Which task would you like to perform?1- Create a new Apusic Domain 創(chuàng)建一個(gè)新域2- Remove a existing Apusic Domain3- Build a new Apusic Domain TemplateCHOOSE TASK BY NUMBER: 1WELCOME TO CREATE DOMAIN WIZARD 歡迎來到創(chuàng)建域向?qū)?-------------------------------This wizard will help you to create a new domain, and it will create some files and directories on your computer.PRESS <ENTER> TO CONTINUE:Select Apusic Domain Source ... 選擇Apusic域來源
-------------------------------Select the source for which the domain will be created. You can create the domain without domain template or by selecting an existing Apusic domain template.->1- Select the system default template 選擇系統(tǒng)默認(rèn)模板2- Select a custom templateCHOOSE DOMAIN SOURCE BY NUMBER, OR PRESS <ENTER> TO ACCEPT THE DEFAULT:1Select The System Default Template ...
--------------------------------------The difference between Standard Edition template and Cluster Edition template is that Cluster Edition is a cluster enable domain template.->1- Standard Template 標(biāo)準(zhǔn)模板2- Cluster TemplateCHOOSE DEFAULT TEMPLATE BY NUMBER, OR PRESS <ENTER> TO ACCEPT THE DEFAULT:1Apusic Domain Configuration ...
-------------------------------Where would you like to install the domain?
Defalut location = /usr/local/aas/domainsENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULTDomain Location: Enter the name for the domain,the name is a valid identity of the domain.Domain names already exists:1- mydomain2- samplesDomain Name: screenshotApusic Server Configuration ...
-------------------------------Set up the server listening port 設(shè)置該域監(jiān)聽端口 HTTPdefault port = 6888 Apusic默認(rèn)使用6888Please enter your server listening port,PRESS <ENTER> TO ACCEPT THE DEFAULTListen Port : 4444 Set up the server security listening port HTTPS端口default port = 6889Please enter your server security listening port,PRESS <ENTER> TO ACCEPT THE DEFAULTSSL Listen Port : 5555Apusic Advanced Options Configuration ...
-----------------------------------------Here will help you to to continue the data source configuration, J2EE application configuration.
Default value = NOENTER YOUR CHOOSE, OR PRESS <ENTER> TO ACCEPT THE DEFAULTDo you want to define advanced options? (Y|N): nPlease wait...
--------------...............The task has been finished successfully.
apusic.conf
創(chuàng)建域之后,可以通過修改配置文件APUSIC_HOME/domains/mydomain/config/ apusic.conf來修改端口號(hào)
在配置文件中apusic.conf中,關(guān)注參數(shù)Port和SecurePort、SSLEnabled
<SERVICECLASS="com.apusic.net.Muxer"><ATTRIBUTE NAME="Port" VALUE="8080"/><ATTRIBUTE NAME="Backlog" VALUE="1024"/><ATTRIBUTE NAME="Timeout" VALUE="30"/><ATTRIBUTE NAME="LookAheadTimeout" VALUE="30"/><ATTRIBUTE NAME="MaxWaitingClients" VALUE="200"/><ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/><ATTRIBUTE NAME="SSLEnabled" VALUE="False"/><ATTRIBUTE NAME="SecurePort" VALUE="6889"/><ATTRIBUTE NAME="KeyStore" VALUE="config/sslserver"/><ATTRIBUTE NAME="KeyStorePassword" VALUE="keypass"/><ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/></SERVICE>
部署應(yīng)用
? 再金蝶容器中部署應(yīng)用時(shí),有兩種部署方式。一種是通過war包的方式,另外一種則是通過文件夾的方式;在智慧營區(qū)項(xiàng)目實(shí)踐過程中,我們采用war包的方式來部署應(yīng)用。通過使用
mvn package
可以把項(xiàng)目的打包過后的目錄拷貝至APUSIC_HOME\mydomain\applications目錄下。
? 具體拷貝內(nèi)容如下圖所示:
war包部署
? 與Tomcat容器一樣,金蝶容器可以使用war包的方式進(jìn)行部署,當(dāng)在運(yùn)行時(shí)會(huì)產(chǎn)生如下幾種效果:
deploy文件夾
? Apusic容器會(huì)把拷貝進(jìn)入applications目錄的war包解壓到domains\mydomain\deploy,并且在該目錄下可以看到如下的內(nèi)容,可以通過cmd的tree命令查看目錄層級(jí)
C:\Users\AAS-V9.0_2019-1-7\domains\mydomain\deploy\rest-0.0.1-SNAPSHOT>tree
卷 OS 的文件夾 PATH 列表
卷序列號(hào)為 68EB-2279
C:.
├─.extends
│ ├─rest-0.0.1-SNAPSHOT
├─.system
│
└─rest-0.0.1-SNAPSHOT└─tmpfiles├─docroot│ ├─META-INF│ │ └─maven│ │ └─com.example│ │ └─rest│ └─WEB-INF│ ├─classes│ │ └─com│ │ └─example│ │ └─rest│ │ └─controller│ └─lib└─jsp
由此,可以分析出程序會(huì)解析war包,并把相關(guān)的資源拷貝到deploy目錄。
日志產(chǎn)生
程序產(chǎn)生的日志位于applications同級(jí)目錄下的logs目錄domains\mydomain\logs
在Linux環(huán)境下,可以采用
tail -f ..\domains\mydomain\logs\apusic.log.0
來動(dòng)態(tài)產(chǎn)看程序所產(chǎn)生的日志。
瀏覽器訪問
點(diǎn)擊跳轉(zhuǎn)
訪問請(qǐng)求驗(yàn)證
package com.example.rest.controller;import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** 添加問候controller** @author songquanheng* @Time: 2020/2/19-17:58*/
@RestController
public class HelloController {Logger logger = LoggerFactory.getLogger(this.getClass());@GetMapping("/hello")public String hello() {logger.info("Enter hello");JSONObject result = new JSONObject();result.fluentPut("code", 0).fluentPut("msg", "success");logger.info("Leave hello");return result.toJSONString();}
}
則在程序正常運(yùn)行之后,若想要訪問hello接口,則應(yīng)采用如下的方式:
http://hostname:port/war包名/@RequestMapping.value
上述URL中變化的位置為war包名的有無,若指定項(xiàng)目生成的war包為ROOT,則war包名為空采用如下的URL形式即可
http://hostname:port/@RequestMapping.value
文件夾部署
文件夾部署與war包部署很相似,沒什么區(qū)別。不再贅述
應(yīng)用管理
? 無論是在Linux還是windows環(huán)境中,靈活的使用進(jìn)程號(hào)pid和端口號(hào)是控制應(yīng)用的靈活方式。
如下的啟動(dòng)、終止腳本位于APUSIC_HOME\domains\mydomain\bin目錄下。Windows環(huán)境下使用.cmd結(jié)尾的腳本,Linux使用另外的啟動(dòng)和停止腳本。如下的陳述以Linux為主
啟動(dòng)應(yīng)用
./mydomain/bin/startapusic
上述命令會(huì)在當(dāng)前終端啟動(dòng)該應(yīng)用程序,若當(dāng)前終端關(guān)閉,則該應(yīng)用程序終止,顯然這不是希望的方式。
可以使用nohup命令來把當(dāng)前進(jìn)程放進(jìn)后臺(tái),具體操作如下:
[Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# nohup ../bin/startapusic 1> ../bin/nohup.out 2>&1 &[1] 28330[Note] System unauthorized, Please contact the system supplier.
此時(shí),會(huì)在…/bin目錄下生成nohup.out,其中的內(nèi)容為platform項(xiàng)目生成的日志。
使用數(shù)據(jù)重定向技術(shù)把相關(guān)的日志打入bin目錄下的nohup.out文件。
注意:不要把日志文件打入applications目錄下,因?yàn)锳pusic默認(rèn)會(huì)把該文件下的文件看作一個(gè)應(yīng)用程序?qū)Υ?/p>
數(shù)據(jù)重定向可以將stanardout output和standard error output分別傳送到其他的文件或設(shè)備區(qū),分別使用如下的特殊字符。
終止應(yīng)用
[Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# ../bin/stopapusic
? 需要注意的是,在金蝶容器中執(zhí)行了上述的停止命令,雖然執(zhí)行成功了,但程序其實(shí)并未執(zhí)行成功,此時(shí)需要通過殺死進(jìn)程的方式來解決該問題,可以使用如下的方式來獲取pid
獲取pid
lsof
lsof -i:port
netstat
7/domains/mydomain/applications# netstat -ano | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 關(guān)閉 (0.00/0/0)[Note] System unauthorized, Please contact the system supplier.[Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# netstat -anop | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 3745/java 關(guān)閉 (0.00/0/0)
jps
jps(Java Virtual Machine Process Status Tool),可以用于
是java提供的一個(gè)顯示當(dāng)前所有java進(jìn)程pid的命令,適合在linux/unix平臺(tái)上簡(jiǎn)單察看當(dāng)前java進(jìn)程的一些簡(jiǎn)單情況。
jps命令使用如下所示:
-q:只輸出進(jìn)程 ID
-m:輸出傳入 main 方法的參數(shù)
-l:輸出完全的包名,應(yīng)用主類名,jar的完全路徑名
-v:輸出jvm參數(shù)
-V:輸出通過flag文件傳遞到JVM中的參數(shù)
jps命令在Linux環(huán)境和Windows環(huán)境下均可使用。
C:\UsersR\AAS-V9.0_2019-1-7\domains\mydomain\deploy>jps -v
21508 Jps -Dapplication.home=C:\Program Files\Java\jdk1.8.0_66 -Xms8m
21736 RemoteMavenServer -Djava.awt.headless=true -Didea.version==2018.1.5 -Xmx768m -Didea.maven.embedder.version=3.3.9 -Dfile.encoding=GBK1612 Main -Djava.endorsed.dirs=C:\Users\AAS-V9.0_2019-1-7\lib\endorsed -Dcom.apusic.domain.home=C:\Users\AAS-V9.0_2019-1-7\domains\mydomain -Djava.net.preferIPv4Stack=true -Xms512m -Xmx1024m -XX:MaxPermSize=256m -verbose22428 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Djb.vmOptionsFile=C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.5\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.1
終止進(jìn)程
[Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# kill -9 1612
問題解決
跨域問題
跨域問題原因
? 出于瀏覽器的同源策略限制。**同源策略(Sameoriginpolicy)**是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會(huì)受到影響。可以說Web是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。同源策略會(huì)阻止一個(gè)域的javascript腳本和另外一個(gè)域的內(nèi)容進(jìn)行交互。所謂同源(即指在同一個(gè)域)就是兩個(gè)頁面具有相同的協(xié)議(protocol),主機(jī)(host)和端口號(hào)(port)
跨域?qū)嵗?/h4>
當(dāng)一個(gè)請(qǐng)求url的協(xié)議、域名、端口三者之間任意一個(gè)與當(dāng)前頁面url不同即為跨域
當(dāng)前頁面url 被請(qǐng)求頁面url 是否跨域 原因
http://www.test.com/ http://www.test.com/index.html 否 同源(協(xié)議、域名、端口號(hào)相同)
http://www.test.com/ https://www.test.com/index.html 跨域 協(xié)議不同(http/https)
http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu)
http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog)
http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口號(hào)不同(8080/7001)
解決步驟
當(dāng)一個(gè)請(qǐng)求url的協(xié)議、域名、端口三者之間任意一個(gè)與當(dāng)前頁面url不同即為跨域
當(dāng)前頁面url 被請(qǐng)求頁面url 是否跨域 原因
http://www.test.com/ http://www.test.com/index.html 否 同源(協(xié)議、域名、端口號(hào)相同)
http://www.test.com/ https://www.test.com/index.html 跨域 協(xié)議不同(http/https)
http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu)
http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog)
http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口號(hào)不同(8080/7001)
? 在北京15所保障第二次測(cè)試時(shí),由于AI相關(guān)的應(yīng)用程序A在一個(gè)金蝶容器中,28所開發(fā)的應(yīng)用程序B在另外一個(gè)金蝶容器中。在實(shí)際運(yùn)行時(shí)發(fā)現(xiàn),若B想要通過請(qǐng)求獲取A中的圖片資源時(shí),頁面報(bào)錯(cuò),跨域。可以通過如下的配置解決該問題。
- 修改APUSIC_HOME\domains\mydomain\config\web.xml
<!-- 提供跨域支持 --><filter> <filter-name>CORS</filter-name> <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> <init-param> <param-name>cors.allowOrigin</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.supportedMethods</param-name> <param-value>GET, POST, HEAD, PUT, DELETE</param-value> </init-param> <init-param> <param-name>cors.supportedHeaders</param-name> <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value> </init-param> <init-param> <param-name>cors.exposedHeaders</param-name> <param-value>Set-Cookie</param-value> </init-param> <init-param> <param-name>cors.supportsCredentials</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CORS</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
從mvn倉庫中下載兩個(gè)jar包
- java-property-utils-1.9.1.jar
- cors-filter-2.5.jar
并且把該兩個(gè)文件拷貝到APIUSIC_HOME/lib目錄內(nèi)
JNDI配置
概念
java Naming and Directory Interface:java命名和目錄接口
? 主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。
一句話說:創(chuàng)建了一個(gè)目錄,然后將創(chuàng)建的對(duì)象存進(jìn)去,類似于在注冊(cè)中心注冊(cè)了一個(gè)東西,以后使用的時(shí)候,只需要在注冊(cè)中心也就是目錄中根據(jù)名字去查找,注冊(cè)中心也就是目錄會(huì)返回給你想要的。
? JNDI提供了應(yīng)用編程接口(application programming interface,API)和服務(wù)提供者接口(service provider interface,SPI)。這一點(diǎn)的真正含義是,要讓應(yīng)用與命名服務(wù)或目錄服務(wù)交互,必須有這個(gè)服務(wù)的JNDI服務(wù)提供者,這正是JNDI SPI發(fā)揮作用的地方。服務(wù)提供者基本上是一組類,這些類為各種具體的命名和目錄服務(wù)實(shí)現(xiàn)了JNDI接口—很像JDBC驅(qū)動(dòng)為各種具體的數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)了JDBC接口一樣。
? 這樣做的好處:比如更換數(shù)據(jù)庫,只需要修改配置信息,名稱不變,因此代碼也不會(huì)變(也就是平常自己使用都是Class.forName,然后指定驅(qū)動(dòng)類名,每次需要使用的時(shí)候都要加載并創(chuàng)建連接,如果更換了數(shù)據(jù)庫,就需要修改代碼中的驅(qū)動(dòng)類名;而使用JNDI后,第一次加載數(shù)據(jù)庫后根據(jù)配置文件信息創(chuàng)建連接,并將此連接放入目錄中,以后不管在哪里使用只需要從目錄中獲取即可)
? JNDI中的命名(Naming),就是將Java對(duì)象以某個(gè)名稱的形式綁定(binding)到一個(gè)容器環(huán)境(Context)中,以后調(diào)用容器環(huán)境(Context)的查找(lookup)方法又可以查找出某個(gè)名稱所綁定的Java對(duì)象。讀者也許會(huì)感到奇怪:自己創(chuàng)建一個(gè)Java對(duì)象,將其綁定到JNDI容器環(huán)境中后又查詢出來,這有什么意思?在真實(shí)的項(xiàng)目應(yīng)用中,通常是由系統(tǒng)程序或框加程序先將資源對(duì)象綁定到JNDI環(huán)境中,以后在該系統(tǒng)或框架中運(yùn)行的模塊程序就可以從JNDI環(huán)境中查找這些資源對(duì)象了。例如,Tomcat服務(wù)器在啟動(dòng)時(shí)可以創(chuàng)建一個(gè)連接到某種數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)源(DataSource)對(duì)象,并將該數(shù)據(jù)源(DataSource)對(duì)象綁定到JNDI環(huán)境中,以后在這個(gè)Tomcat服務(wù)器中運(yùn)行的Servlet和JSP程序就可以從JNDI環(huán)境中查詢出這個(gè)數(shù)據(jù)源(DataSource)對(duì)象進(jìn)行使用,而不用關(guān)心數(shù)據(jù)源(DataSource)對(duì)象是如何創(chuàng)建出來的,這種方式極大地增強(qiáng)了系統(tǒng)的可維護(hù)性,當(dāng)數(shù)據(jù)庫系統(tǒng)的連接參數(shù)發(fā)生變更時(shí),這只是Tomcat系統(tǒng)管理員一個(gè)人要關(guān)心的事情,而與所有的應(yīng)用程序開發(fā)人員無關(guān)。
? 上述行文的含義就是,我們?cè)诮鸬萜髦信渲脭?shù)據(jù)庫連接時(shí),可以把DataSource對(duì)象注冊(cè)進(jìn)入JDNI命名中,就好像注入到容器中的組件,在使用時(shí),只需要獲得該組件的引用即可,而不關(guān)注DataSource是如何產(chǎn)生的。
應(yīng)用場(chǎng)景
-
spring中連接數(shù)據(jù)庫(不再使用Class.forName)
-
tomcat之類的應(yīng)用服務(wù)器上配置的連接池
-
程序中不是使用Class.forName來獲取鏈接的
-
而是使用Context lookup從池中獲取有用的連接
在28所項(xiàng)目開發(fā)過程中,也是通過JDNI來統(tǒng)一數(shù)據(jù)庫的訪問。這樣當(dāng)以后需要更改數(shù)據(jù)庫配置時(shí),通過命名服務(wù),代碼不需要更改,只需要修改配置即可。
Tomcat和金蝶容器AAS都支持這種JDNDI配置。
金蝶容器配置步驟
金蝶容器、SpringBoot整合JNDI來獲取數(shù)據(jù)源的配置步驟如下:
金蝶容器配置
Bean關(guān)聯(lián)
金蝶容器web端
? 基于瀏覽器的Web管理控制臺(tái),是內(nèi)置在Apusic應(yīng)用服務(wù)器之上的一個(gè)Web應(yīng)用,能夠通過Web管理控制臺(tái)方便的對(duì)Apusic應(yīng)用服務(wù)器進(jìn)行各種管理配置工作。在訪問Web管理控制臺(tái)之前,首先要確保已經(jīng)正確的啟動(dòng)了Apusic應(yīng)用服務(wù)器。
按照以下步驟啟動(dòng)遠(yuǎn)程管理控制臺(tái):
- 在瀏覽器中輸入以下URL:
http://hostname:port/admin
其中:
hostname 指安裝Apusic應(yīng)用服務(wù)器軟件的計(jì)算機(jī)的IP地址或主機(jī)名
port 是Apusic應(yīng)用服務(wù)器的http端口、默認(rèn)為6888
在登陸頁面要鍵入在啟動(dòng)應(yīng)用時(shí)輸入的用戶名和密碼。金蝶容器的初始用戶名和密碼為
admin:Admin1234
注意:如果是自定義的域,在第一次部署程序時(shí),會(huì)讓用戶輸入用戶名和密碼。瀏覽器使用用戶名和密碼來可視化訪問該容器。
日志查看
?
應(yīng)用設(shè)置
? 在28所項(xiàng)目進(jìn)行的過程中,由于把項(xiàng)目制作成了ROOT.war,因此需要配置應(yīng)用程序上下文,配置如下:
總結(jié)
? 上述行文中,圍繞金蝶容器,詳細(xì)的總結(jié)了金蝶容器的目錄結(jié)構(gòu)、域創(chuàng)建、應(yīng)用程序啟停、日志查看等細(xì)節(jié),并且在行文中把自己在使用金蝶容器過程中遇到的兩個(gè)問題:跨域問題和JNDI整合進(jìn)行了總結(jié)。詳細(xì)的梳理了金蝶容器的使用,以期望能對(duì)后來使用金蝶容器的開發(fā)人員有所幫助。
總結(jié)
- 上一篇: 阿里JAVA 开发手册----整理
- 下一篇: 如何使用命令行生成高强度密码