顯示具有 java 標籤的文章。 顯示所有文章
顯示具有 java 標籤的文章。 顯示所有文章

2024-09-13

TOMCAT設定特定目錄不得執行JSP及JSPX

如果網站允許使用者上傳檔案,通常會禁止上傳可執行檔(如jsp & jspx),

除了檢查副檔名外,也可在app的web.xml加上以下設定,讓jsp/jspx變成唯讀:

<servlet>

        <servlet-name>DefaultServlet</servlet-name>

        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

        <init-param>

            <param-name>readonly</param-name>

            <param-value>true</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>DefaultServlet</servlet-name>

        <url-pattern>/path/to/upload/*</url-pattern>

    </servlet-mapping>


但像jspx一般也很少人會去寫,建議直接在tomcat/conf/web.xml禁用:

<servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jsp</url-pattern>

        <!--<url-pattern>*.jspx</url-pattern>-->

 </servlet-mapping>

2022-09-08

Netbeans 啟動 tomcat 時,顯示"Starting of Tomcat failed, the server port 8084 is already in use."(8084端口被占用)

 在netbeans設定tomcat時,若port設定為8084,且又打開 HTTP monitor功能的話,會導致tomcat開啟不了,顯示"Starting of Tomcat failed, the server port 8084 is already in use."

這是因為HTTP Monitor打開後,netbeans會啟動內建的tomcat 3 server,導致占port 8084,
要嘛將Server port改掉,要嘛關掉HTTP Monitor (這功能是會在HTTP Server Monitor顯示GET/POST等訪問紀錄)


另外,netbeans的web專案要是出現 "Deployment descriptor directory could not be found" 訊息,那可能就是少了web.xml 或WEB-INF資料夾,在專案按右鍵新增web.xml檔案即可。

2022-04-21

tomcat 9 發生 "too many open files" (開啟太多檔案)

 前二天早上tomcat突然掛掉,log 顯示如下:

  20-Apr-2022 10:22:41.714 嚴重 [https-jsse-nio2-8443-Acceptor-0] org.apache.tomcat.util.net.Acceptor.run Socket accept failed
 java.util.concurrent.ExecutionException: java.io.IOException: 開啟太多檔案
	at sun.nio.ch.CompletedFuture.get(CompletedFuture.java:69)
	at org.apache.tomcat.util.net.Nio2Endpoint.serverSocketAccept(Nio2Endpoint.java:334)
	at org.apache.tomcat.util.net.Nio2Endpoint.serverSocketAccept(Nio2Endpoint.java:59)
	at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: 開啟太多檔案
	at sun.nio.ch.UnixAsynchronousServerSocketChannelImpl.accept0(Native Method)
	at sun.nio.ch.UnixAsynchronousServerSocketChannelImpl.accept(UnixAsynchronousServerSocketChannelImpl.java:344)
	at sun.nio.ch.UnixAsynchronousServerSocketChannelImpl.implAccept(UnixAsynchronousServerSocketChannelImpl.java:280)
	at sun.nio.ch.AsynchronousServerSocketChannelImpl.accept(AsynchronousServerSocketChannelImpl.java:125)
	... 4 more

初步調查是tomcat開啟了太多檔案,造成"too many open files" (開啟太多檔案),網路上一般說法是說要調整系統的ulimit上限才行,但想想不太對,這系統會需要同時開啟的檔案不多,而且運行了幾年也沒有發生file leak的狀況。

先找出tomcat的pid,再用 ls -al /proc/<pid>/fd | wc -l,就可以知道tomcat目前開啟多少檔案(包含unix socket file)。

後來發現是tomcat自已的bug,會一直存取tomcat-users.xml卻沒有釋放資源,解法是升級 tomcat 9 >= 9.0.14+,或修改 server.xml,加入watchSource="false":

<resource 
 auth="Container"
 description="User database that can be updated and saved"
 factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
 name="UserDatabase" pathname="conf/tomcat-users.xml"
 type="org.apache.catalina.UserDatabase"
 watchsource="false">
ref:
https://bz.apache.org/bugzilla/show_bug.cgi?id=62924#c2
https://zhuanlan.zhihu.com/p/75897823
https://www.cnblogs.com/linus-tan/p/10328801.html

2021-06-18

tomcat若前面有proxy,但又有阻擋ip的需求

 tomcat若前面有proxy,但又有阻擋ip的需求,可以如下設定
(假設ip放在X-Forwarded-For裡):

<Valve className="org.apache.catalina.valves.RemoteIpValve"

        remoteIpHeader="X-Forwarded-For" 

        requestAttributesEnabled="true" />

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

   deny="1\.2\.3\.\d+|5\.5\.\d+\.\d+" />


REF:
https://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Proxies_Support
https://stackoverflow.com/questions/33495416/restrict-access-to-tomcat-manager-by-ip

2021-05-20

tomcat 版本slowlirs dos攻擊修改

 很簡單,Connector加上connectionTimeout="8000" (不要大於8秒,不然會失敗) 即可,

測試工具:

https://github.com/shekyan/slowhttptest/wiki


ref

https://stackoverflow.com/questions/49442855/mitigating-slow-http-post-vulnerability-on-tomcat-8

2021-05-12

netbeans 8 修復maven 及 plugin 問題

 新的maven要求https傳輸,所以需要升級maven:

1.下載新的maven:

http://maven.apache.org/download.cgi

2.解壓縮下載的檔案,放到netbeans安裝資料夾中的 java/maven 資料夾

3.在netbeans的jave/maven設定中,替換掉maven home

4.把 maven的conf/settings.xml的mirror區塊註解掉


然後netbeans 8的plugin portal的url發現已失效,可到以下頁面去找:
https://cwiki.apache.org/confluence/display/NETBEANS/Where+to+download+plugins+for+NetBeans+10.0+and+earlier

例如8.2: http://plugins.archive.librebeans.org/catalogue/8.2/catalog.xml

ref:

https://stackoverflow.com/questions/14026314/maven-location-when-installed-indirectly-with-netbeans-glassfish

https://oak.dev/2020/03/03/maven-error-return-code-is-501-reasonphrase-https-required/

2021-05-05

升級JDK 11.0.11後,無法正常使用TLS寄信

 ubuntu上面利用javax.mail寫的寄信程式,在系統自動升級jdk到 11.0.11 後,使用tls smtp寄信就失效了,經查是因為 jdk已禁用了 tls 1.0, tls 1.1,所以必須改強制使用 tls >= v1.2(很奇怪的點就是javax.mail握手時不會自動tls v1.2 or 1.3) ,當然你的mail server也要有支援 tls >= v1.2


            props.setProperty("mail.smtp.host", "your.smtp.server");

            props.setProperty("mail.smtp.auth", "true");

            props.setProperty("mail.smtp.port", "587");

            props.setProperty("mail.smtp.starttls.enable", "true");

            props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2"); //強制tls v1.2

            Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {

                @Override

                protected PasswordAuthentication getPasswordAuthentication() {

                    return new PasswordAuthentication("username", "password");

              }

            });

2021-02-25

tomcat 使用特殊字元網址或參數,造成400 bad request錯誤訊息

tomcat 使用特殊字元網址或參數,會造成400 bad request錯誤訊息,即使在web.xml設置error-page也無法禁止顯示系統報告(想不透...),需更改 server.xml,在<Host>加入:

<Valve className="org.apache.catalina.valves.ErrorReportValve" errorCode.0="conf/error.html" showReport="false" showServerInfo="false" />

其中 errorCode.0代表所有錯誤訊息,error.html 選擇使用$CATALINA_BASE相對路徑放在conf/error.html

ref:

https://stackoverflow.com/questions/794329/disable-all-default-http-error-response-content-in-tomcat

http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve

2020-11-19

macos從El Capitain (10.11)升級到Mojave (10.14)

 用El Capitain撐了許久,不升級也不行了,一堆軟體或外掛套件的更新都要求要新一點的OS版本,像homebrew或VSCode一堆套件都要新的作業系統library才有辦法compile & install。

升級時注意事項:

1.先重置nvram跟smc再升級,不然很有可能升級過程中卡住,要是真的卡住就強制關機,再用command+r重裝。

2.重新安裝XCode及command line tools for xcode
https://developer.apple.com/download/more 下載即可,注意mojave支援的XCode最高版本為11.3.1,安裝Xcode前先把舊的Xcode刪掉再複製新的過去,不然會卡很久。

3.homebrew的話,先brew update-reset & brew update,重置repo資料庫,然後brew doctor看看有沒有什麼問題,有些已經不存在formula的可以 brew uninstall --force package-name & rm -rf /usr/local/Caskroom/package-name。

4.java的話,決定先移除oracle java,改安裝openjdk:

brew remove --ignore-dependencies java
brew remove --ignore-dependencies java8

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Java
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8_xxx.jdk

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk/openjdk/adoptopenjdk8
brew cask install adoptopenjdk/openjdk/adoptopenjdk11

brew install jenv
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
<重開command window>
jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
jenv global 1.8 或 jenv global 11 設定其中一個預設java版本

ref:
https://www.java.com/zh-TW/download/help/mac_uninstall_java.html
https://www.jenv.be/
https://github.com/AdoptOpenJDK/homebrew-openjdk

2019-08-02

IntelliJ Idea的market place無法從網路載入plugin清單的問題


如果遇到IntelliJ Idea的market place plugin無法從網路載入清單,
可以先關閉ipv6,或修改idea 的vm options,強制為ipv4試試:

修改
~/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/192.5728.98.vmoptions

加入
-Djava.net.preferIPv4Stack=true

不過很寄怪,改了之後變成時好時壞,不知是不是我是使用openjdk8,而不是用jetbrain jvm的關係。

2019-07-23

Ubuntu 18.04上同時有jdk8及jdk11的JavaFX(OpenJFX)安裝問題

由於有同時開發java8及java 11的需求,因此裝了openjdk8跟openjdk11,
如果在ubuntu上二個jdk都要安裝javafx(openjfx),會是一件頭痛的事。

先來處理jdk8 + openjfx8:

為了jdk8能使用javafx,需強制降版安裝openjfx8:
sudo apt install \
  openjfx=8u161-b12-1ubuntu2 \
  libopenjfx-java=8u161-b12-1ubuntu2 \
  libopenjfx-jni=8u161-b12-1ubuntu2

sudo apt-mark hold \
  openjfx \
  libopenjfx-java \
  libopenjfx-jni

(當然也可以直接改用oracle jdk8,但oracle是個死要$的公司,你知道的)
改安裝zulu jdk也可以,jkd8直接就含openjfx,未來會連jdk11也一起包含openjfx。
https://www.azul.com/zulu-gets-graphical-with-openjfx/

=========================這裡可以跳過============================
也可以手動下載deb來裝:
https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/libopenjfx-java_8u161-b12-1ubuntu2_all.deb.html
https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/openjfx_8u161-b12-1ubuntu2_amd64.deb.html
https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/libopenjfx-jni_8u161-b12-1ubuntu2_amd64.deb.html

比較怕死的,將這三個.deb手動解壓縮:
dpkg -x libopenjfx-java_8u161-b12-1ubuntu2_all.deb ./openjfx8
dpkg -x openjfx_8u161-b12-1ubuntu2_amd64.deb ./openjfx8
dpkg -x libopenjfx-jni_8u161-b12-1ubuntu2_amd64.deb ./openjfx8
再依解壓縮後的目錄結構放到系統對應的資料夾。

或直接下指令強迫安裝(注意,--refuse-overwrite=不覆寫舊檔):
dpkg --install --refuse-overwrite --force-depends --force-conflicts libopenjfx-java_8u161-b12-1ubuntu2_all.deb
dpkg --install --refuse-overwrite --force-depends --force-conflicts openjfx_8u161-b12-1ubuntu2_amd64.deb
dpkg --install --refuse-overwrite --force-depends --force-conflicts libopenjfx-jni_8u161-b12-1ubuntu2_amd64.deb
=================================================================

再來處理jdk11+ openjfx11:

要是apt強制降版裝openjfx8,那原本預設的openjfx11就會被移除,
因此只能手動處理。

先手動下載openjfx模組(JavaFX Linux jmods)放到:
/usr/lib/jvm/java-1.11.0-openjdk-amd64/jmods

再下載openjfx SDK(JavaFX Linux SDK),解壓縮後要放哪都行,譬如放到
/usr/lib/jvm/java-1.11.0-openjdk-amd64/openjfx

如果是用Jetbrains IntelliJ + JDK >=11,可以參考以下設定環境:
https://openjfx.io/openjfx-docs/#IDE-Intellij
(先新增專案的openjfx SDK library路徑,然後編輯module-info.class加入javafx對應模組,或直接在VM啟動選項新增模組路徑及對應模組)

=================================================================
別忘了裝scene builder:
https://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-1x-archive-2199384.html
https://docs.oracle.com/javase/8/scene-builder-2/installation-guide/jfxsb-installation_2_0.htm
=================================================================
ref:
https://stackoverflow.com/questions/49469941/netbeans-error-bundler-webstart-jnlp-bundler-jnlp-failed-to-produce-a-bundl
http://hongouru.blogspot.com/2015/09/solved-error-building-new-project-using.html
https://stackoverflow.com/questions/53744923/java-lang-unsatisfiedlinkerror-com-sun-glass-ui-gtk-gtkapplication-isdisplayva
https://bugs.launchpad.net/ubuntu/+source/openjfx/+bug/1799946

2019-01-28

macOS 使用brew安裝 java8

以前可以從brew直接指定安裝jdk8:
brew cask install java8

不過目前沒法直接指定jdk版本,要安裝jdk8變這樣:
brew tap caskroom/versions
brew cask install java8

看一下目前有提供的java(或jdk):
brew search java
brew search jdk

目前都預設安裝jdk 11了:
brew cask info java
brew cask info adoptopenjdk
brew cask info oracle-jdk

2018-04-29

JAVA與MySQL的UTFB8MB4問題


1.升級MySQL 至少 > 5.5.3,並修改/etc/my.cnf,加入以下設定後,重開機
(JDBC預設會抓資料庫的character-set-server來做character判斷)
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

2.修改資料table裡,將需要支援擴充字集的「欄位」改成utfbmb4_unicode_ci

3.升級 tomcat/lib裡的mysql-connector-java,至少 > 5.1.13,建議5.1.47(含)以上

4.tomcat修改context.xml,連線字串中加入
(characterEncoding=UTF8已預設相容UTF8MB4,此設定拿掉會直接讀資料庫的character-set-server,其實也沒影響)
(autoReconnect=true是為了能自動重新讀取資料庫設定,以避免讀到舊暫存設定)
useUnicode=true&amp;autoReconnect=true&amp;characterEncoding=UTF8

5.java正則表示式中,使用Pattern.compile("regex")似乎無法正常判斷unicode範圍20000 ~ 2A6D6 (42711字)及2F800 ~ 2FA1D (542字)的4 bytes字元,因此改用String.matches("regex"):
//是否全為漢字
str.matches("^[\\u4E00-\\u9FBB\\u3400-\\u4DB5\\uF900-\\uFAD9\\x{20000}-\\x{2A6D6}\\x{2F800}-\\x{2FA1D}\\(\\)]+$")

6.javascript的全漢字正則表示式:
!/^([\u4E00-\u9FBB|\u3400-\u4DB5|\uF900-\uFAD9]|[\uD800-\uDBFF][\uDC00-\uDFFF])+$/.test(STRING)

ref:
https://segmentfault.com/a/1190000000616820
http://seanlook.com/2016/10/23/mysql-utf8mb4/

CenOS上升級JRE及TOMCAT

切換為root
sudo -i

安裝tomcat9
cd /www
wget http://ftp.mirror.tw/pub/apache/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7.tar.gz
tar zxvf apache-tomcat-9.0.7.tar.gz

新增tomcat使用者及群組
groupadd tomcat useradd -s /bin/false -g tomcat -d /www/apache-tomcat-9.0.7 tomcat

修改tomcat目錄owner及group
chwon -hR tomcat.tomcat /www/apache-tomcat-9.0.7

安裝jre
cd /usr/java
wget https://www.oracle.com/paht/to/jre/for/jdk-XXX-linux-x64.tar.gz
tar zxvf jre-XXX-linux-x64.tar.gz
alternatives --install /usr/bin/java java /usr/java/jdkXXX/jre/bin/java 300
rm latest
ln -s /usr/java/jdkXXX latest

修改jre路徑
update-alternatives --config java

移除原來jre
sudo update-alternatives --remove java /usr/java/jdk_oldXXX/jre/bin/java

重建並移除無用soft link
cd /etc/alternatives
ln -sf /usr/java/jdkXXX/jre/bin/* .
ln -sf /usr/java/jdkXXX/bin/* .
ln -sf /usr/java/jdkXXX/man/man1/* .
find -xtype l -delete

修改 /etc/profile
-----------------
...
export JAVA_HOME=/usr/java/jdkXXX
export CATALINA_HOME=/apps/tomcat-x.x.x
-----------------
source /etc/profile
java -version
echo $JAVA_HOME

修改 /etc/systemd/system/multi-user.target.wants/tomcat.service
將 jre跟tomcat路徑改掉
=====================
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

#restart after failure
Restart=on-failure
RestartSec=5
TimeoutStartSec=60
TimeoutStopSec=60


export JAVA_HOME=/usr/java/jdk1.8.0_172
export CATALINA_HOME=/apps/tomcat-9.0.7

Environment=JAVA_HOME=/usr/java/jdk1.8.0_172
Environment=CATALINA_PID=/apps/tomcat-9.0.7/temp/tomcat.pid
Environment=CATALINA_HOME=/apps/tomcat-9.0.7
Environment=CATALINA_BASE=/apps/tomcat-9.0.7
Environment='CATALINA_OPTS=-Xms512M -Xmx4096M -server -XX:+UseParallelGC'
#Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/apps/tomcat-9.0.7/bin/startup.sh
ExecStop=/apps/tomcat-9.0.7/bin/shutdown.sh
#ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target
=====================
systemctl daemon-reload

=========
找出檔案的mod number
stat --format '%a' filename

找出有+s的檔案
find . -perm -4000
find . -perm -2000

ref:

2018-03-23

修改TOMCAT的預設ROOT位置

方法一(建議):
新增一個要做為網站根目錄的資料夾(注意不可放在webapps裡,以免重複deploy)
新增 ROOT.xml 到 conf\Catalina\localhost
(ROOT名稱不可改變,且為大寫,因為路徑是以xml的檔名判斷的)
ROOT.xml 新增一行(其中path屬性可不需要,因如前述原因,是以xml的檔名為路徑)
<Context path="" docBase="資料夾所在的絕對路徑,或相對於webapps的相對路徑" />


方法二:
新增一個要做為網站根目錄的資料夾(可放在webapps裡,也可放其它地方)
修改 conf/server.xml
修改<Host>屬性 autoDeploy = fasle, deployOnStartup = false 以免自動deploy
在 <Host> 標籤中新增(需要 path = "" 即路徑為 \ )
<Context path="" docBase="資料夾所在的絕對路徑,或相對於webapps的相對路徑" />

ref:
https://stackoverflow.com/questions/715506/how-to-change-the-root-application
http://staraphd.blogspot.tw/2009/10/change-default-root-folder-in-tomcat.html

2017-11-08

Java中處理HTML Entity (HTML Special Char)

幫同事處理資料庫中有HTML Entity的字元,將其轉為對應的unicode字元,
(猜測是舊系統的網頁編碼為UTF-8,但送出表單時的charset為BIG5,因無法找到對應字元所造成的)

String name = "王&#34320;老&#34321;先&#34322;生&#34323;王&#34324;老&#34325;先&#34326;生&#34327;王&#34328;老&#34320;先&#34329;生&#34330;";
        Pattern regex = Pattern.compile("&#(\\d{5});");
        StringBuffer sb = new StringBuffer();
        
        long time1 = System.currentTimeMillis();
        
        //使用HTMLDocument及HTMLEditorKit
        HTMLDocument doc = new HTMLDocument();
        new HTMLEditorKit().read(new StringReader(name), doc, 0);
        System.out.println(doc.getText(0, doc.getLength()));
        
        long time2 = System.currentTimeMillis();
        System.out.println(time2 - time1); //60毫秒
        
        //使用正則表示式
        Matcher match = regex.matcher(name);
        while(match.find()){
            match.appendReplacement(sb, new String(Character.toChars(Integer.parseInt(match.group(1)))));
        }
        match.appendTail(sb);
        System.out.println(sb);
        
        long time3 = System.currentTimeMillis();
        System.out.println(time3 - time2);//1毫秒

2017-06-04

tomcat server的CPU突然飆高,連線遺失

今天發現在VM上面RUN的TOMCAT會隨機掉連線(400, 500都出現了),
密集REQUEST的時候就會發生問題,而且CPU TIME都超過100%了!
後來發現是 server.xml 中 connector 的問題,預設是用 org.apache.coyote.http11.Http11NioProtocol (NIO),
後來改為 org.apache.coyote.http11.Http11Nio2Protocol (NIO2),
然後就,好了,也不知道是不是舊 NIO 跟 VM 犯沖,改成效能比較好的NIO2似乎就沒事兒了。

2017-04-17

Java中HttpServer (HttpsServer) ,解決response會延遲或卡住的問題

第一次使用 com.sun.net.httpserver.HttpServer 跟 com.sun.net.httpserver.HttpsServer 做為http server時,
發現連續的request會使得response卡住:

OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes()); //卡住造成阻塞,過很久才會回應,
os.close();

解決之道,就是確保connection能close, 並使用multi-thread:
final Executor multi = Executors.newFixedThreadPool(10);
final HttpServer server = HttpServer.create(new InetSocketAddress(s_HTTP_PORT), 5);
//... do your REST bindings here
server.setExecutor(multi);
server.start();

//bindings中送出Connection = close 的 header
httpExchange.getResponseHeaders().add("Connection", "close");


ref:
http://stackoverflow.com/questions/15235075/1s-delay-in-httpserver-since-java-7

2017-03-31

TOMCAT的安全性header設定

TOMCAT有內建一些關於CORS及SECURITY的HEADER, 可以的話建議打開,以利用瀏覽器所提供的安全性功能,以下是個人常用的預設設定:

修改 tomcat-home/conf/web.xml (對所有apps生效):

    HeaderSecurityFilter
    org.apache.catalina.filters.HttpHeaderSecurityFilter
    
      hstsEnabledtrue
    
      hstsMaxAgeSeconds15768000
    
      hstsIncludeSubDomainstrue
    
      antiClickJackingEnabledtrue
    
      antiClickJackingOptionSAMEORIGIN
    
      antiClickJackingUri
    
      blockContentTypeSniffingEnabledtrue
    
      xssProtectionEnabledtrue


  CorsFilter
org.apache.catalina.filters.CorsFilter
  
    cors.allowed.originshttps://your.domain.com
  



    HeaderSecurityFilter
    /*
    
    REQUEST
    FORWARD
    INCLUDE
    ERROR
    ASYNC


    CorsFilter
    /*
    
    REQUEST
    FORWARD
    INCLUDE
    ERROR
    ASYNC



ref:
https://tomcat.apache.org/tomcat-8.5-doc/config/filter.html#CORS_Filter
https://tomcat.apache.org/tomcat-8.5-doc/config/filter.html#HTTP_Header_Security_Filter
https://wiki.mozilla.org/Security/Guidelines/Web_Security#Content_Security_Policy
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
HTTP Headers 的資安議題 (1)
HTTP Headers 的資安議題 (2)
HTTP Headers 的資安議題 (3)

TOMCAT自訂共用library目錄

常常TOMCAT裡的apps都會共用一些library,而通常的做法是直接丟到${catalina.base}/lib裡面去,不過有時在搬移網站時,常常就會忘了哪些是自已新增的lib.jar了 XDD
因此可以另外建一個目錄來放自已的共用jar library。譬如先建一個common-lib專放自已共用的jar:

修改/conf/catalina.properties的shared.loader or common.loader屬性,新增路徑:
shared.loader="${catalina.base}/common-lib","${catalina.base}/common-lib/*.jar","${catalina.home}/common-lib","${catalina.home}/common-lib/*.jar"
...或
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"