mike-neckのブログ

Java or Groovy or Swift or Golang

Spring WebFlux Security で ユーザー認証を実装する + ハンドラーでユーザーの情報を取り出す

Spring Security の WebFlux Security Configuration という公式のドキュメントにあるセクションにも書いてあるのだが、ユーザー認証の実装はこれまでの Spring Security にある UserDetails の Reactive 版である ReactiveUserDetails を実装したオブジェク…

Spring Web Flux を少しさわってみただけの話

Spring 5 から Reactive Web というのになるらしく、サーバーの性能が落ちにくくなると聞いた(違うかもしれない)ので、 家で試してみることにした。 環境 Spring Boot: 2.0.0.RC1 Java: 1.8 ビルドファイル 以下の curl コマンドで取得できるもの curl https…

同一のURLに同じHTTPメソッドで異なるパラメーターを送った時に異なるメソッドを割り当てる

同じURL(/foo/bar)に異なるメソッド(baz(Baz baz) と qux(Qux qux) の二つのメソッド)を割り当てる方法 @Canonical class Text { String text } @Canonical class Bidirecional { String question String answer1 String answer2 } @Canonical class Result<T> </t>…

spring-security-oauth を用いて実装したリソースサーバーでのトークンの有効期限

spring-security-oauth を用いてリソースサーバーを実装する場合、 tokenServices という名前の ResourceServerTokenServices を実装するクラスのビーンを作ります。これを実装する時に気をつける必要があるのが、 ResourceServerTokenServices に、 loadAut…

Spring Boot CLI にて Spring Security OAuth2 によるリソースサーバーの実験

Spring Security OAuth2 を用いたリソースサーバーを、データベース連携で実装するパターンの実験をしてみた。 spring-security-oauth のドキュメント の Resource Server Configuration の部分を読むとリソースサーバーの実装については、次のように書いて…

Spring MVC で日本語URLにリダイレクトするとURLが文字化けしてしまう場合の対処

Spring MVC で日本語を含むURLにリダイレクトすると… @GetMapping(path = "bar") String somePage() { return "redirect:/to/日本語url"; } $ curl -v http://localhost:8080/foo/bar * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) por…

Spring Rest Repositories + JPA で @ManyToOne で指定されているフィールドを用いて検索するリクエストを投げる

ドキュメント探しても、ググってもstack overflowを探しても明確に書かれていなかったっぽいので(本来的には hal の仕様を見るのが正しいかもしれない) 次のような二つのエンティティが存在するものとする。 @Entity class Book { @Id private Integer id; p…

SpringのRestTemplate で Rest Repository が返す application/hal+json からオブジェクトを取得する

何か日本語でなかったため。 実行するのは spring-web が jar にある Java SE 環境(Spring context は存在しない)。 必要なライブラリー org.springframework.hateoas:spring-hateoas とその依存ライブラリー 使ったバージョン spring-core: 4.3.13.RELEASE …

Spring Data REST(+ Spring Data JPA)でPOSTする時のメモ

Spring Data REST + Spring Data JPA で こんなエンティティを作る。 @Entity public class User { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private String name; } @Entity public class Message { @Id @GeneratedValue(strategy = IDE…

JUnit5のNestedクラスを使ってテスト条件をクラスの構造に閉じ込める(テスト小ネタ Advent Calendar 2017 6日目)

JUnit4まででは増えすぎたテストを整理するために、スタティックなメンバークラスを作って整理してきたかと思います。 @RunWith(Enclosed.class) public class Foo { public static class Bar { @Test public void baz() {} } } JUnit5 ではネストしたクラス…

Kotlin で groovy.lang.Closure のインスタンスを生成・取得する(G* Advent Calendar 2017 6日目)

G* Advent Calendar 2017 の 6日目は groovy.lang.Closure のインスタンスを Kotlin で生成・取得する方法です。 Groovy! 3分くらいで読み終われます。 groovy.lang.Closure のインスタンスを Kotlin で生成・取得する方法です。Kotlin コードの中で Closure…

Spring Fest 2017 に行ってきた

記憶を頼りに参加した勉強会についてまとめておくだけ。 2017/11/24 開催の Spring Fest 2017 に参加しました。 springfest2017.springframework.jp 会社ではSpringを使っていないJava EEを改造したフレームワークを利用していますが、独自フレームワークは…

Gradle kotlin DSL の便利機能

Gradle のスクリプトを Kotlin で書いていると、タスクが自動的に二つ足されていることに気づいたので、それを使ってみたら、わりと便利だった。 kotlinDslAccessorsReport タスク 現在のプロジェクトが利用できる extension と convention のKotlin 実装コ…

Gradle JUnit5 Starter Pluginをリリースした

JUnit5 がリリースされてだいぶたちますが、そろそろ移行終わりましたか? ちなみに僕が勤務している会社ではJavaのバージョンがあわないので、JUnit4のままです。 ところで、JUnit5を使う時、わりと面倒くさい設定をいろいろと書かなければならず、導入する…

kotlinでgradle のスクリプトを書く時に気をつけたい点

Gradleは元々Groovyで書かれてたツールで、バージョン2の頃にほぼすべてをJavaに置き換えられたという経緯があるのですが、未だに古い一部の実装ではGroovyでスクリプトを書くことを前提にしている箇所があります(と断言していいかどうかは自信がない)。 mav…

Gradle Kotlin DSL を用いたプロジェクトでmavenにpublishするときの注意

gradle kotlin-dsl のサンプル「hello-kotlin」を真似て、kotlin stdlib のdependencyを記述すると、invalidなpomが生成されてしまう。 dependencies { api(kotlin("stdlib-jre8")) } 生成されるpom.xml <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jre8</artifactId> </dependency> version …

昨日書いたダメなコード

毎日残念なコード書いてるので続けてみる 前提 Java7(今日は関係ない) やりたいこと 指定した範囲のランダムな long の値がほしい 書いたコード 例 : 上限値(long かつ max > 0)を受け取ってランダムな値を返す final Random random = new Random(); long ra…

昨日書いたダメなコード

ヒドイコードを書いたので忘れないようにメモっておく(忘れないとは言ってない) 前提 Java7 guava18.0 使用 やりたいこと Optional の中の値に対して filter して isPresent の結果がほしい 書いたコード 例: Optional<Integer> に対して value > 0 の filter をかけ</integer>…

Java9でGradleを動かす

単なるメモ Javaのバージョンが2017/10/22現在で9.0.1で、Gradleのバージョンが4.2.1以下だとJavaのバージョンをパースできないためにGradleを実行できない Gradle4.2 での実行結果 $ java --version Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 java 9…

Gradleでプラグインを利用する方法

今更なタイトルですが… incubatingなAPIで plugins DSLと呼ばれている方法です。plugins DSLはgradleのplugin repositoryにあるプラグインをid(とバージョン)だけで引っ張ってこれるようにする方法で、gradleの2.10くらいに登場しています。gradleにデフォル…

git secretsとJavaのserialVersionUIDの相性が悪い

念のためにgit secretsを入れて、aws providerを設定していますが、ちょくちょくJavaのプロジェクトのコミットで失敗が発生してた。 コミットのエラーログを調べると、serialVersionUID private static final long serialVersionUID = -8419924062942848690L…

JUnit5の標準のassertとDynamicTestの用い方

JUnit5でわりと便利だと思っているのが、JUnit5に標準でついてくる Assertions#assertAll と @TestFactory で返す Iterable<DynamicTest> です。 エンタープライズな現場でよく見かけるテストとして、こういうのがあるかと思います。 @Test void firstTest() { final Map<Long, UserEntity> </long,></dynamictest>…

ジェネリクス勉強会に行ってきた件

ジェネリクス勉強会に行ってきたよ、という話 + 抽象型でジェネリクスを実装してみるという話が面白かったので実際にやってみたという話

daabの開発をKotlinでできるようにする

今いる会社の提供するdirectというチャットサービスではボットの開発ができて、そのsdkがdaab(direct agent assist bot)というらしい。 で、daabチームが専修大学でハッカソンを共催するということで、僕も自分の会社のボットくらい作れないと恥ずかしいなと…

JJUG CCC 2017 Spring 参加メモ

表題の通りJJUG CCC 2017 Springに行ってきました。参加したセッションのメモです。 www.java-users.jp エンプラ開発におけるレガシーアプリケーションの巻取りとモジュール分割の戦い 既存のレガシーアプリケーションにアプリケーションを追加する案件から…

Java Day Tokyo 2017 参加メモ

Java Day Tokyo 2017に数年ぶりに参加しました。そのメモです。僕が参加したのは次のセッションです。 基調講演 Java 9 and Beyond: Java Renaissance in the Cloud Modular Development with JDK 9 Tuning G1GC Java SE 9のすすめ 緊急開催!Java技術メモ三…

Java9(ea163)でHttpClientを使ってみたノート

ディレクトリ構成やmodule-info.javaで少々ハマったので(10分)、ノート。 Java SE9から公式のやっと面倒くさくないHttp Clientが出るので試してみた。 試してみたのは jdk.incubator.httpclient モジュールの jdk.incubator.http.HttpClient とその関連クラ…

Spring BootでThymeleaf3を使うときのbuild.gradle

ググってもMavenの方法しか出てこないのでメモ。 start.spring.io で作ったbuild.gradleに次を追加するだけ。 ext['thymeleaf.version'] = '3.0.0.RELEASE' ext['thymeleaf-layout-dialect.version'] = '2.0.0' 元ネタはこちらのステファン・ニコルさんのコ…

JSUG勉強会 2017 - 3 〜ドメイン駆動設計 powered by Spring のメモ

JSUGの勉強会に参加したので、そのメモ。 jsug.doorkeeper.jp 資料は公開されるだろうから、ここでしか聞けないことを中心にメモ(ツイート)したつもりだが、資料に盛り込まれている可能性は十分にある。なお、資料は以下の通り。 ドメインロジックに集中せよ…

Javaでの和暦の扱いについて

Date and Time APIでの和暦の扱いをちゃんと調べていなかったので、調べた。 なお、以下で用いるコードにおいては次のフォーマッタおよび、タイムゾーンを使った。 final ZoneId tokyo = ZoneId.of("Asia/Tokyo"); final DateTimeFormatter formatter = new …