【Java】Executorsのメソッド
Executors#newsinglethreadexecutor()で一つのthreadが作られるわけだけど、私はてっきり毎回同一のthreadを返すものだと勘違いしていた。
勘違いしたまま、ループの中でこのメソッドを実行してしまい、新しいthreadが次々に量産されるという恐ろしい事態が発生しました。
このくらいはちゃんと調べてから使いましょう。
【JAVA】DeploymentRuleSetについてメモ
DeploymentRuleSetの設定でハマったのでメモ
最近のJava(7以降)ではセキュリティの関係で自己署名証明書(Self-signed certificate.いわゆるオレオレ証明書)で署名されたアプリケーションを実行することができません。
セキュリティ設定によりJavaアプリケーションがブロックされるのはなぜですか。
Java Web Startやアプレットを実行しようとすると、実行がブロックされてしまいます。
Java7ではセキュリティのレベルを「中」に下げればそれでも実行できたのですが、8になって「高」または「最高」しか設定できなくなりました。
詳しい作り方はこちら(Deployment Rule Set)
1.ruleset.xmlを作成
セキュリティによるブロックを回避したい対象をルールセットに記述する。
ホストを指定する方法と、自己署名証明書のSHA-256フィンガプリントを指定する方法の2つがあります。
①ホストを指定する方法
<ruleset version="1.0+">
<rule>
<id location="https://foo.bar.com" />
<action permission="run" />
</ rule>
<rule>
<id location="http://*.hoge.com" />
<action permission="run" />
</ rule>
</ ruleset>
今回はホスト名ではなくIPで指定したかったので、
みたいなを書き方をしたのですが、なぜかうまくいきませんでした。
IPアドレスは間違いないのにブロックされてしまいます。
IPアドレスだとダメなのか…?
そこで次の方法で試したところ、うまくいきました。
②自己署名証明書のSHA-256フィンガプリントを指定する方法
(SHA-256ってなんて読むのが一般的なんだろう。ニゴロ?two fifty-six?)
<ruleset version="1.0+">
<rule>
<id>
<certification="ABC…(中略)…XYZ" />
</ id>
<action permission="run" />
</ rule>
</ ruleset>
■フィンガプリント(メッセージダイジェスト、ハッシュ値)の調べ方
%JAVA_HOME%\bin\keytool -printcert -jarfile <myjar>.jar
として出力された内容のSHA-256で始まる行を探す
SHA-256:AB:CD:(中略):WX:YZ
このフィンガプリントの、コロンを消したものを<certification=" に続けて書く
2.DeploymentRuleSet.jarの作成と署名
jarファイルの作成
jar cvf DeploymentRuleSet.jar ruleset.xml
DeploymentRuleSet.jarが作成されるので、これを署名する。
この署名は自己署名証明書ではだめ。
3.Deploymentフォルダに配置
2で作ったDeploymentRuleSet.jarをWindowディレクトリの下に置く。
C:\Windows\Sun\Java\Deploymentなど
(MacやLinuxの場合は/etc/.java/deployment)
Javaコントロールパネル→セキュリティタブ→アクティブなルールセットに作成したルールセットが表示されればOK