daisuzz.log

daisuzz.log

ソフトウェアエンジニアをしています。ソフトウェア開発に関することや読んだ本について書いているブログです。

Spring

Spring Securityを使ってエンドポイントに応じて複数の認証方式を切り替える方法

Spring Securityを使ったAPIを実装していたときに、REST APIにはBASIC認証をかけて、画面にはフォーム認証をかける、ということがやりたくなったのでその方法を備忘録として書いておきます。 環境 Spring Boot 2.7 Kotlin 1.6.21 方法 /api/から始まるREST A…

HttpSecurityはどうやってSecurityFilterChainを生成しているのか

タイトルの通り、Spring Securityで認証認可を行う場合に利用するHttpSecurityの処理について調べたので備忘録として書いていきます。 前置き ソースコードを読んだ上で書いていますが、正しい情報はSpring Securityの公式ドキュメントや、リポジトリを参照…

Spring Securityを使ったモック認証処理を実装する

Spring Securityを使った認証処理を実装したアプリケーションにおいて、モックの認証情報を使って動作確認をする方法を書いていきます。 認証処理の実装と、認証対象の画面や機能の実装が並行して行われているときに、Spring Securityの仕組みを使いつつもモ…

Spring SecurityをComponent-basedな設定方法で設定してみる

背景 Spring Security without the WebSecurityConfigurerAdapter を見て、従来のSpring Securityの設定方法がSpring Security5.7から非推奨になることを知ったので代わりの設定方法を試してみます。 環境 Spring Boot 2.6.7 Kotlin 1.6.21 何が変わるのか S…

Spring BootでElasticsearch Java API Clientを使ってみる

Elasticsearch Java API Client について Spring BootでElasticsearch Java API Clientを使う pom.xmlにライブラリを追加 ElasticsearchClientの設定 ElasticsearchClientを使ってみる Elasticsearchの勉強の一環で公式ドキュメントを読んでいたところ、 dep…

Spring BootアプリケーションのセッションをDBで管理する

はじめに 今回は、Spring BootアプリケーションのセッションをDBで管理する方法を調べたので備忘録として書いていきます。 書いてある内容は手を動かして確認したものですが、正しい情報は公式ドキュメント(以下は2.4.3のもの)の内容を見てください。 Spring…

Spring Session Data RedisがどうやってRedis Keyspace Notificationsを有効にしているのかコードを読んでみた

iikanji.hatenablog.jp ↑こちらの去年の記事で、RedisのKeyspace Notificationsについて書いたのですが、その中でSpring SessionはRedisのKeyspace Notificationsを自動で設定してくれる、と書きました。 今回は、その設定をしているConfigureNotifyKeyspace…

UriComponentsBuilderとUriComponents、どちらのencodeメソッドを使えばいいのか?

UriComponentsBuilderが提供するencodeメソッドとUriComponentsが提供するencodeメソッドの違いがわからず調べたのでまとめてみます。 今回、使用したSpring Framework のバージョンは5.3.3です。 そもそもUriComponentsBuilderとは? Spring Frameworkが提…

UriComponentsBuilderで設定したクエリ文字列の値がnullの場合にクエリ全体を非表示にする

Spring Frameworkでは、UriComponentsBuilderやServletUriComponetnsBulder, MvcUriComponentsBuilder, もしくはUriBuilderインターフェースを実装したクラスを使うことでURIを簡単に作ることができます。 たとえば、以下のコードのようにUriComponetsBuilde…

Spring Session Data Redis (2.4.1) のコードを読んでみる

Spring Session Data Redisのソースコードを読んだので備忘録としてまとめていきます。 ソースコードは以下を読みました。 github.com Spring Session Data Redisのパッケージ構成 Spring Session Data Redisのクラスは全部で13ファイル RedisSessionReposit…

【Spring Boot】ThymeleafからのPOSTリクエストをPUT/DELETEで受け取る方法

背景 Spring Bootでは@PutMappingや@DeleteMappingなどを使うことでPUT/DELETEメソッドのHTTPリクエストを受け取ることができます。 一方でHTML5では、PUT/DELETEメソッドを送信することができないため、直接HTMLからサーバにリクエストを投げる場合には、HT…

はじめてのSpring Cloud Contract

はじめに Consumer Driven Contract Testingとは Spring Cloud Contract Spring Cloud Contractを使ってみる 環境 Provider Consumer ProviderにSpring Cloud Contractを導入する pom.xmlの設定 CDCの作成 YAMLの場合 Javaの場合 Kotlinの場合 Groovyの場合 …

【OpenAPI】Spring Bootで実装したREST APIのクライアントコードを自動生成する方法

今回は、Spring Bootで実装したREST APIのコードから、APIを叩くクライアントコードを自動生成する方法を書いていきたいと思います。 今回やりたいこと 環境 やることの流れ REST APIを実装する 自動生成に必要なライブラリ/プラグインをpom.xmlに追加する s…

【Spring】List<String>型のフォーム値が未入力の場合にnullのリストを受け取る方法

前回のエントリで、Spring FrameworkにおいてString型のフォーム値が未入力の場合に、空文字ではなくnullを受け取る方法を説明しました。 この方法では、List型のフォーム値が未入力の場合は空文字のリストになってしまうので、今回はこれをnullのリストで受…

【Spring】String型のフォーム値が未入力の場合nullで受け取る方法

Spring Frameworkで未入力のフォームの値をデフォルトで設定されている空文字ではなく、nullで受け取る方法をまとめます。 環境は以下です。 Spring Boot 2.3.1.RELEASE Thymeleaf 3.0.11.RELEASE Kotlin 1.3.70 以下のようなフォームと、フォームの値を格納…

【Spring】DefaultMessageCodesResolverについて調べてみた

Spring Framework のエラーメッセージ周りで詰まって調べたところを忘備録としてまとめてみる。 DefaultMessageCodesResolverとは? バリデーションによって作られたエラーコードからメッセージコードを作成するクラス。 オブジェクトやフィールドに対するメ…

【Spring】HandlerInterceptorの各メソッドが呼ばれる流れを追ってみた

HandlerInterceptorが呼ばれる流れを追ってみる。 ソースコードのバージョンはSpring Boot 2.3.0.RELEASE。 HandlerInterceptorは以下のようにpreHandle, postHandle, afterComplitionを実装することで、Controllerのメソッド(ハンドラ)の前後に任意の処理を…

【Thymeleaf】th:hrefで変数の値に応じて動的にクエリパラメータをつける方法

Thymeleafのth:hrefで変数の値に応じて動的にクエリパラメータをつける方法を忘備録として残しておきます。 やりたいこと th:hrefでURLを生成するときに以下のように変数の値に応じて動的にクエリパラメータをつけたい。変数の値が空の場合はクエリパラメー…

Spring Fest2019に参加しました

12/18に開催されたSpringFest 2019に参加してきたので、忘備録として書いていきます。 https://springfest2019.springframework.jp/ From Spring Boot 2.2 to Spring Boot 2.3 https://www.slideshare.net/makingx/from-spring-boot-22-to-spring-boot-23-js…

Spring Frameworkの@Componentと@Controller,@Service,@Repositoryの違いを調べてみる

Springの@Component, @Controller, @Service, @Repositoryの違いについて気になったので調べてみます。 Stereotype Annotation @Component, @Controller, @Service, @Repositoryなどは, Stereotypeアノテーションと呼ばれるものです。Stereotypeアノテーショ…

gRPCをつかったSpring Bootアプリケーションをつくってみる

概要 gRPCに興味があったので、Spring Bootを使ったサンプルアプリケーションを実装してみました。 gRPCとは 詳しくは、Guides – gRPC をみてください。 Googleが開発したRPCを実現するプロトコル HTTP/2上で動作する デフォルトでは、Protocol Buffersをつ…

Java, Kotlinを使ったSpring におけるDependency Injectionについて

概要 今回は、Java, Kotlinそれぞれを使ったSpringのDIの書き方をまとめてみます。 環境は、Java 1.8, Kotlin 1.2.31, Spring Boot 2.0.0.RELEASE, Spring 5.0.3.RELEASE です。 SpringにおけるDIについて DIについての詳しい説明は割愛します。詳しく知りた…

はじめてのSpring AOP

今回は、Spring AOPについて自分の理解の整理も兼ねてまとめていきたいと思います。 詳しい仕様が知りたい方は公式リファレンスを読んでください。 バージョンは、Spring Boot 2.0.1.RELEASE(Spring 5.0.5.RELEASE)です。 AOPとは AOPとは、Aspect Oriented …

Springfox+Swagger+Springで生成したドキュメントにERRORバッジが含まれてしまう問題

Springで実装したREST APIサーバアプリケーションにSpringfox+Swaggerを導入してWebドキュメントを自動生成したのですが、環境によってデプロイ後の画面でErrorバッジが表示されるケースがありました。 そこで今回は、その原因と解決策について書いていきた…

@SpringApplicationConfiguration -> @SpringBootTestに書き換えたときにハマったところ

Spring5.0.xやSpring Boot2.0.xがリリースされていますが、今回は古いSpringのバージョンを用いて実装されているコードのリファクタリングでハマったところを書いていこうと思います。 やりたいこと Spring1.4から@SpringApplicationConfigurationがdeprecat…

Spring FrameworkのMockRestServiceServerについて

今回は、クライアントサイドのクラスのモックテストを行うときに便利な、MockRestServiceServerについて書いていきます。 MockRestServiceServer とは RestTemplateを利用して外部のサーバにHTTPリクエストを送信するクラス(Client-side)のテストを行いたい…

Spring Boot アプリケーションにSwaggerを導入する方法

今回は、Spring Bootで作成したRESTful API サーバアプリケーションに、Swaggerを導入してWebドキュメントを作成してみようと思います。 Swaggerとは swagger.io Swagger is the world’s largest framework of API developer tools for the OpenAPI Specific…