Tagbangers Blog

Spring

Spring Boot で Hibernate Search のマルチテナンシーをやってみる

Hibernate Search がマルチテナンシーに対応したので、Spring Boot と組み合わせて試してみた。 試した環境は下記の通り。 Spring Boot 1.2.5.RELEASE Hibernate Search 5.3.0.Final サンプルコードはここにも置いてあります。 https://github.com/tagbangers/spring-best-practices/tree/master/spring-best-practice-hibernate-search-multi-tenancy マルチテナンシー (multi-tenancy) ってなに? ひとつの...

Spring MVC で Post-Redirect-Get パターンをやってみる

Spring MVC で Post-Redirect-Get パターンを実装するときのやり方をメモ。 コードは GitHub にもあります。 https://github.com/tagbangers/spring-best-practice... パターン1:セッションを使わない package practice.post_redirect_get; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.val...

​Spring MVC @RequestMappingのマッピング優先度まとめ

Controllerに使う@RequestMappingにはURIの変数や正規表現などいろいろなパターンを指定できますが、どのコントローラにマッピングされるかという優先度をいつも忘れてしまうのでまとめてみます。 ちなみにパターンとして記述できる記号についてはAntPathMatcherのAntPatternComparatorの中で説明されているようで そのdocによると、 ? → 1文字にマッチ * (ワイルドカード) → 0かそれ以上の文字数にマッチ ** (ダブルワイルドカード) → 0かそれ以上のディレクトリにマッチ という意味になってます。 URI変数({variables})とワイ...

​@EnableGlobalMethodSecurity を Controller クラスで使うメモ

Spring Security で @EnableGlobalMethodSecurity を用いれば、メソッドレベルでアクセスコントールが可能になるが、Service クラスレイヤーではなく、Controller レイヤーで使用する場合はちょっと注意が必要。 Spring MVC の基本設定パターンでは、たいてい ServletMapping ごとにサブのアプリケーションコンテキストが生成され、ルートコンテキストのみに、@EnableGlobalMethodSecurity を適用してもそのままでは Controller クラスに @Secure などを指定しても動作しない。 これに関連する...

​Spring Cloud for Amazon Web Services に PullRequest してみた

前回の Thymeleaf に続く PullRequest シリーズです。 今回は Spring Cloud for Amazon Web Services に PullRequest してみました。 Spring Cloud for Amazon Web Services ってなに? Spring Cloud のサブプロジェクトで、AWS を使った開発を簡単にしてくれます。例えば、メッセージやキャッシングAPIなど、Spring のお作法で AWS の機能が簡単に使えます。 特に自分が気に入ったのは、SimpleStorageResource クラスですね。 このクラス自体は、Spring ...

ThymeleafでSpringの環境変数を使う

@の後ろにBean名をつけることで、そのBeanにアクセスすることができます。 *ThymeleafでSpringのpropertyファイル(application.propertiesなど)に記述している変数を利用したい場合 ${@environment.getProperty('property.key')} *環境ごとに表示を変更したい場合 This is the production profile or This is the production profile という形で利用できます。 ちなみにシステム環境変数を利用する場合は、以下のように書...

Spring Security で認証・認可情報をユーザの更新時に再読込みする方法

Spring Security でログイン認証を行う場合、認証情報と認可情報はセッションに保存される。 ※認証情報=ログインが成功したか ※認可情報=どのような権限があるか つまり、一度ログインすれば、ログアウトするまでログインした時の認証と認可情報が継続する。 この場合、困るのは管理者が対象ユーザをユーザ管理機能などで、権限を変更したり、削除した場合だ。 基本的には管理者が操作したそのタイミングでその時ログインしているユーザにも内容を反映したい。 これに対応するには2つのアプローチ方法が考えられる。 ユーザのアクセスのたびに認証・認可情報を再読込みする 管理者がユーザを更新した時にセッション...

Spring Securityの @EnableGlobalMethodSecurity でカスタム Expression

なぜ MethodSecurityExpressionRoot クラスが public じゃないないのか。そして下記チケットが wontfix になっているのか。 https://jira.spring.io/browse/SEC-1691 前のプロジェクトで @EnableGlobalMethodSecurity で独自の関数を作成したいと思った時、 MethodSecurityExpressionRoot クラスがパッケージスコープでそれを諦めたけど、よく見たらチケットにこのようにコメントされていた。 You can also add your own expressions using ...