afnf.net

Spring Security 3.2から4.0に移行した

Spring Security 3.2から4.0に移行したんですが、いくつかの修正が必要でした。

マイグレーションガイド見ろ

http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html


はい終了・・・っていうのもアレなんで、このブログエンジンであるblog-java1の移行について書きます。

applicationContext-security.xmlの変更

<http>のuse-expressionsデフォルト値がtrueになった

access="ROLE_USER"access="hasRole('USER')"などに書き直すか、use-expressions="false"を明記します。

<http>のdisable-url-rewritingデフォルト値がtrueになった

ガラケーサイト以外はあまり困らなそうです。

<form-login>のデフォルト値変更

  • username-parameterがj_usernameからusernameになった
  • login-processing-urlがj_passwordからpasswordになった
  • password-parameterが/j_spring_security_checkから/loginになった
  • authentication-failure-urlが?login_errorから?errorになった
  • logout-urlが/j_spring_security_logoutから/logoutになった

アプリケーションの改修が面倒な場合は、旧値を明記することでも対応できます。

<headers>がデフォルトで有効になった

セキュリティ強化のため以下設定がデフォルトで有効になりました。

  • <cache-control />
  • <content-type-options />
  • <hsts />
  • <frame-options />
  • <xss-protection />

有効になっても問題になりにくいと思いますが、個別で無効化できます。

<csrf>がデフォルトで有効になった

CSRF対策がデフォルトで有効になりました。未実装だとPOST時にトークンエラーになりますが、エラーメッセージに出るのですぐに気付けるはずです。別のCSRF対策が作り込んであれば、無効化してよいでしょう。

ロールのprefixにROLE_が強制される

これはちょっとハマりました。

blog-java1では、管理者ロールをusersテーブルのrole列に格納しており、ADMINという文字列を使用していました。prefixがROLE_ではないため、ログインできなくなります。SQL文でROLE_ADMINへupdateする必要がありました。

20150405_role_prefix



ソース差分

blog-java1のソース差分です。

https://github.com/af-not-found/blog-java1/commit/ba445dabf272468673b86579597fa41099899049

Spring4とJava8のアップグレードもいっぺんにやりました。興味があれば直前のコミットを見てください。

所感

メジャーバージョンアップだけあって、けっこうな変更量です。やってて良かったSelenium。

comments (0)

blog-java2 engine (build:2017-09-13 21:46 JST)