20200118のJavaに関する記事は3件です。

IntelliJでSpringBootのdevtoolsが動かない

IntteliJでSpringBootのdevtoolsが動かない。

下書きに残っていたので投稿しておく。

事象

IntteliJでSpringBootのdevtoolsが動かない。

原因

gradle実行だとbuildフォルダに生成されるので、devtoolsの実行契機に当たらない。

対策

Mainから実行すればよいらしい。
outに生成されればdevtoolsは実行される。
しかし、ソースを更新しても実行されない。
理由は、eclipseと違って保存時にコンパイルしていないから。
ソースを更新したらコンパイル(Ctrl + Shift + F9)するようにする。

結果

実行された。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

JFileChooserで「置き換えますか?」と表示する方法

JFileChooserで、ファイルを置き換えるときに「置き換えますか?」と表示する方法があります。

概要

保存時にJFileChooserのapproveSelection()が呼び出されます。そこをオーバーライドすれば良いのです。

コード

NewFileChooser.java
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class NewFileChooser extends JFileChooser {
    @Override
    public void approveSelection() {
        if (getSelectedFile().exists()
                && getDialogType() == SAVE_DIALOG
                && JOptionPane.showConfirmDialog(null, "置き換えますか?", "保存",
                        JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
            return;
        }
        super.approveSelection();
    }
}

まとめ

Swingはこのように、機能の一部をオーバライドすることができます。ただ、思わぬバグを生まないように実装には注意しましょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【2020年3月5日まで】RDS証明書を更新する for java

プロローグ

新しい SSL/TLS 証明書を使用して MySQL DB インスタンスに接続するようにアプリケーションを更新

2020年3月5日までにRDSのcaを更新してくださいという話。
手順通りやれば問題ないのだが、いくつかハマりポイントがあったので記事にした。

前提

・java
・tomcat
・mysql
・証明書はJKS形式
・クライアントの証明書を先に更新し、mysqlの証明書は後から更新
(同時の場合は、ダウンロードする証明書が異なる)

手順

1.証明書の取得

先にクライアントを更新するので、2015,2019のバンドル版をダウンロード
場所は現在と同じでよいかと。

$ cd /etc/pki/java
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
--2020-01-18 15:22:35--  https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 52.216.9.165
s3.amazonaws.com (s3.amazonaws.com)|52.216.9.165|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 65484 (64K) [binary/octet-stream]
`rds-combined-ca-bundle.pem' に保存中

100%[==========================================================================================================================================>] 65,484       193KB/s 時間 0.3s

2020-01-18 15:22:36 (193 KB/s) - `rds-combined-ca-bundle.pem' へ保存完了 [65484/65484]

クライアントとサーバを同時に更新する場合は、SSL/TLS を使用した DB インスタンスへの接続の暗号化 から、2019バージョンにする。東京リージョンの場合は、rds-ca-2019-ap-northeast-1.pem

2.証明書の変換

pemをjksに変換する
pem->der、der->jksの2ステップを踏む必要がある
jksに変換するとき、現在の証明書と異なるファイル名にすること

パスワードは現在と同じで構わない。証明書アクセス用なので、DBのパスワードとは無関係。

$ openssl x509 -outform der -in ./rds-combined-ca-bundle.pem -out ./rds-combined-ca-bundle.der
$ ll
-rw-rw-r-- 1 root root  1016  1月 18 15:22 rds-combined-ca-bundle.der
-rw-rw-r-- 1 root root 65484  9月 20 03:27 rds-combined-ca-bundle.pem

$ keytool -import -file ./rds-combined-ca-bundle.der -destkeystore ./rds-combined-ca-bundle.jks -deststoretype jks

キーストアのパスワードを入力してください:
キーストアのパスワードが短すぎます - 6文字以上にしてください
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
所有者: CN=Amazon RDS Root CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
発行者: CN=Amazon RDS Root CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
シリアル番号: 42
有効期間の開始日: Thu Feb 05 18:11:31 JST 2015 終了日: Thu Mar 05 18:11:31 JST 2020
証明書のフィンガプリント:
         MD5:  CF:C1:A2:0D:A1:C1:B1:3C:12:0B:C1:5A:E5:33:73:EF
         SHA1: E8:11:88:56:E7:A7:CE:3E:5E:DC:9A:31:25:1B:93:AC:DC:43:CE:B0
         SHA256: AF:EB:B8:40:BE:0C:1A:F6:5E:63:E0:CB:D7:9C:CE:35:65:4B:F6:0F:4E:07:62:54:BB:A9:35:E9:63:6D:53:F7
署名アルゴリズム名: SHA1withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 4E 02 EE AC 3E F6 15 C8   4C ED 2C F5 05 C1 8F 9C  N...>...L.,.....
0010: 84 08 49 83                                        ..I.
]
]

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 4E 02 EE AC 3E F6 15 C8   4C ED 2C F5 05 C1 8F 9C  N...>...L.,.....
0010: 84 08 49 83                                        ..I.
]
]

この証明書を信頼しますか。 [いいえ]:  はい
証明書がキーストアに追加されました


$ ll
-rw-rw-r-- 1 root roor  1016  1月 18 15:22 rds-combined-ca-bundle.der
-rw-rw-r-- 1 root root  1078  1月 18 15:23 rds-combined-ca-bundle.jks
-rw-rw-r-- 1 root root 65484  9月 20 03:27 rds-combined-ca-bundle.pem

3.context.xmlの更新

更新前にtomcatは停止すること。

urlのtrustCertificateKeyStoreUrl=file:///etc/pki/java/rds-combined-ca-bundle.jksを作成したjksファイル名にする。

context.xml
<Resource name="jdbc/honyaDB" auth="Container"
    type="javax.sql.DataSource"
    username="honya"
    password="honyapasswd"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://honya.ap-northeast-1.rds.amazonaws.com:3306/honyaDB?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true&amp;requireSSL=true&amp;verifyServerCertificate=true&amp;trustCertificateKeyStoreUrl=file:///etc/pki/java/rds-combined-ca-bundle.jks&amp;trustCertificateKeyStoreType=JKS&amp;trustCertificateKeyStorePassword=password"
/>

エピローグ

context.xml を保存した瞬間に反映されしまうので焦った:scream:
(検証環境なので、そうでもないけど)

証明書を同じファイル名にすればcontext.xmlの変更は要らないが、同じファイル名で新旧を管理するとトラブルの元なので、ファイル名は変更することにした。

2019版証明書(rds-ca-2019-ap-northeast-1.pem)で試したら、しっかり動かなかった:sweat_smile:

サーバ側はawsコンソールでポチポチするだけなので、「SSL/TLS 証明書の更新」を参考にしてください。

参考

新しい SSL/TLS 証明書を使用して MariaDB DB インスタンスに接続するようにアプリケーションを更新

SSL/TLS を使用した DB インスタンスへの接続の暗号化

SSL/TLS 証明書の更新

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む