てきとうなメモ

本の感想とか技術メモとか

Java

log4j2の脆弱性(CVE-2021-44228)

少し調べたのでメモ 概要 外部からの入力をlog4jでそのままログ出力しようとすると、任意のコードを実行できる脆弱性 CVE-2021-45046とv2.16.0について v2.15.0で修正されたかに見えたが、MessagePatternConverter以外の攻撃経路が見つかった。そのため、v2.…

Javaのコネクションプールの接続チェック

コネクションプールからコネクションを取得すると、接続が切れているコネクションを再利用してしまうことがある。 これを防ぐためにコネクションプール側で何かやっていないかなとちょっと調べた。c3p0は testConnectionOnCheckin - プールから取得する時に…

Struts2の脆弱性(S2-046)

S2-045の話は既に書いたけども、S2-046は書いていなかったのでちょっと書く。↓のやつ。Struts2-046: A new vector - Hewlett Packard Enterprise Communityこの脆弱性は、以下の3つの条件に合う場合、マルチパートのアイテムのファイル名に記述されたOGNL式…

ServletのWEB-INF/libのjarが読み込まれる順番

同じライブラリのjarがバージョン別でWEB-INFに置かれていた場合、どっちが読まれるのかなという話。 JSR-000315 Java Servlet 3.0 Final Release のPDFの「4.6. Resources」のところ、 The order in which the JAR files in the WEB-INF/lib directory are …

Apache Struts2の脆弱性(CVE-2016-3081)

JVNVU#91375252: Apache Struts2 に任意のコード実行の脆弱性ぐぐるとみつかるPOCで1番簡単そうなのを解説してみる http://www.example.com/sample.action?method:%23_memberAccess%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%2C%23test%3D%23context.get%…

Apache Log4j 1.2のSyslogAppender

UDPしか対応していないか。TCPやUNIXドメインソケットには対応していないか。SyslogAppenderはSyslogWriterを利用していてその中身は以下のような感じ。log4j/SyslogWriter.java at v1_2_17 · apache/log4j · GitHub package org.apache.log4j.helpers; ... …

実践JUnit

実践 JUnit ―達人プログラマーのユニットテスト技法作者: Jeff Langr,Andy Hunt,Dave Thomas,牧野聡出版社/メーカー: オライリージャパン発売日: 2015/09/02メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る基本的なJUnit4テストの作り方…

昔のcommons-configurationの依存関係多すぎ

昔(v1.4) 現在(v1.10) commons-configurationのせいだけではないけど。

Jersey1.xでPOJOMappingFeatureのテスト

Jersey1.xでJSON入出力するにはJAXBを利用する方法もあるのだが、一番シンプルなのはPOJOとJSONオブジェクトのマッピングを利用する。デフォルトだとこれが有効になっていないので、POJOMappingFeatureを有効にする。サーブレットコンテナだとweb.xmlのinit-…

Jersey1.xでモックをインジェクトしてテスト

Jersey1.x自体にDIの機能があるので、それを使ってみる。基本的には package com.sun.jersey.spi.inject; public interface InjectableProvider<A extends Annotation, C> { ComponentScope getScope(); Injectable getInjectable(ComponentContext ic, A a, C c); } を実装してプロバ</a>…

JerseyTest(v1.x)でListenerなどを扱う

最初からJerseyを使っていなくて、普通のServlet→Jerseyに変換というようなことをしたい場合、ServletContextListenerにアプリケーションの初期化コードとかを書いていてうまくテストできなかったりする。まあ、そのあたりもJersey化すれば良いのだけども、…

m2e pluginの<plugin>設定

pom.xmlに書いてからプロジェクトを選択して「Maven」→「Update Project...」してもPluginを実行してくれない。「Maven」→「Discovery」→「Open Catalog」からインストールしないとダメっぽい。

parseXXXとvalueOf

某書でJavaで文字列から数値に変換する時にXXX.valueOf(ex. Long.valueOf)よりもXXX.parseXXX(ex. Long.parseLong)を使ったほうが効率が良いよと書いてあったのだが、そもそも、前者はオブジェクト型、後者はprimitive typeを返すので目的がちょっと違うよう…

コーディング規約におけるif文の中括弧

世の中のコーディング規約的にはどうなのかなと思ったのでちょっと調べたら中括弧付ける方が多い気がする。 C or C++ Google In general, curly braces are not required for single-line statements, but they are allowed if you like them; conditional o…

if文の中括弧

コーディングスタイル論争「カッコを省略するな」が出るたびに思う事私はコーディング規約で決まっていなければ括弧は使わない派かな。中括弧を使わないと if (cond) statement; と書いていた時に、条件分岐中の処理を増やそうとして if (cond) statement; s…

ServletRequest#setCharacterEncodingする時の注意事項

setCharacterEncoding void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingExceptionこのリクエストのメッセージボディで使われている文字エンコーディング名を上書きします。 このメソッドはリクエストのパラメータを読み…

Struts1の脆弱性(CVE2014-0094)の回避策いろいろ

回避策をいろいろ見かけるようになったのでちょっとまとめる サーブレットのFilterでフィルタ Protect your Struts1 applications - HP Enterprise Business Community FilterでStrutsにリクエストが来る前にclassを含むクエリパラメタをエラーにしてしまう…

リフレクションでオブジェクトのプロパティを設定するライブラリは解析対象にしない親クラスを指定すべきな気がする

今回のStruts1の脆弱性の問題は、どちらかというとcommons-beanutilsの問題な気がする。commons-beanutilsはアクセス可能なプロパティは全て設定できてしまうのだが、使う側からすると自分が想定しているプロパティにのみ設定してほしいという要望はあるだろ…

groovyshで起動するJVMを指定する

Java8のREPLが欲しかったので。JAVA_HOMEを指定すれば良いか。 $ JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home groovysh Groovy Shell (1.8.5, JVM: 1.8.0)

many-to-oneのlazy load

Hibernateはデフォルトで多対1の関連もlazy loadのはずなんだが、primary keyでの関連ではないとlazy loadしてくれないっぽい。org.hibernate.engine.TwoPhaseLoad#initializeEntityで初期化していないEntityを初期化するコードの部分で、org.hibernate.Type…

Hibernateでcreated_at/modified_at

Interceptorを使えばよいか。 public class DatetimeInterceptor extends EmptyInterceptor { @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] typ…

PropertiesConfiguration

commons-configurationのPropertiesConfigurationとjava.util.Propertiesの仕様が異なるためにはまってしまった。値が空白(\u0020)を含む場合、バックスラッシュでエスケープする必要があるのだが、PropertiesConfigurationでは行末の空白はバックスラッシュ…

JUnit実践入門

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)作者: 渡辺修司出版社/メーカー: 技術評論社発売日: 2012/11/21メディア: 単行本(ソフトカバー)購入: 14人 クリック: 273回この商品を含むブログ (65件) を見るこれは非常に面白かっ…

JUnitの文書

githubのwikiが一番よく書かれてあるような気がする。 Home · KentBeck/junit Wiki · GitHub

java.util.Hashtableとjava.util.HashMap

Togetter - 「hashtableのn * 2 + 1の意義」 なるほど。Hashtableのハッシュ関数はハッシュの再作成するときに、 protected void rehash() { ... int newCapacity = oldCapacity * 2 + 1; Entry[] newMap = new Entry[newCapacity]; ... } と、古いサイズnに…

AppleがMac OS XでJavaをサポートしなくなる件

Mac OS Xのupdateにおいて以下のような文言があって、 As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated. Java for Mac OS X 10.6 Update 3 and 10.5 Upd…

実装パターン

実装パターン作者: ケント・ベック,Kent Beck,永田渉,長瀬嘉秀,株式会社テクノロジックアート出版社/メーカー: ピアソンエデュケーション発売日: 2008/12/22メディア: 単行本(ソフトカバー)購入: 30人 クリック: 502回この商品を含むブログ (91件) を見るJ…

Arrays#sort

JavaにはArrays#sortというメソッドがあって配列をソートすることができる.ソートする対象がプリミティブ型だとquick sortで実装され,オブジェクトだとmerge sortで実装している.オブジェクトのソートはstableであるという仕様のためだと思われる.さらに…

Calendar#set

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd"); Calendar c = Calendar.getInstance(); c.set(2000, 0, 1, 0, 0, 0); assertEquals(df.parse("2000/01/01"), c.getTime()); こんな間違いをしてしまった.しかも,エラー見ただけではすぐに気付…

JudeとJar Bundler

UMLを書く必要があったのでJude Communityをインストールした。サポートはWindowsだけなのだがJavaなのでMacでも実行できる。unix系用のシェルスクリプトを付属されているし。でも検索してみるとバンドルにしてインストールしている人がいたので自分もやって…