埼玉在住エンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことについて残していきたいと思っています。https://ikujip.jpの開発も行っているため、そこで使った知識なども載せられればと思います。

Java

ApacheとTomcatの連携でリダイレクトが上手くいかない

Javaで組まれたWebサイトをApacheとTomcatを連携させて動かしているのですが、 先日サイト改修により一部ページのURLも変更させた時のリダイレクト設定について苦労したのでそれについて書きます。 やりたいことは、「http://ドメイン/test/sample.html」と…

Spring Boot Devtoolsを使って自動再起動

Javaなどソースの変更をいちいちコンパイルをして確認する場合、 毎回コンパイルを手動でするのは面倒ですよね。 (慣れている人は何も感じないかもしれませんがw)Spring Bootでは自動でコンパイルをしてくれるツールがあるので、 少しは開発効率を上げるこ…

Spring Boot のJavaバージョンを変更

Intellijなど、IDEで開発する場合はJDKをインストールして使うので問題ないと思いますが、 本番環境にアップした場合などにJavaのバージョンを指定しておかないと開発環境で開発した通りに動作してくれないなどの問題が発生してしまいます。変更箇所はpom.xm…

Spring Bootの起動時にJDKのエラー(警告)が発生

Javaの一部JDKのバージョンでは、 Spring Bootの起動時に以下のエラー(警告)が発生することがあります。 /Library/Java/JavaVirtualMachines/jdk1.8.0_141.jdk/Contents/Home/bin/java ... objc[3929]: Class JavaLaunchHelper is implemented in both /Libr…

@PathVariableを必須にしない

Spring BootのGETリクエストでパラメータを設定した時、 パラメータを取得するには@PathVariableを使います。例えば以下のような@RequestMappingがあった場合、idは必須になります。 @RequestMapping(value="top/{id}", method = RequestMethod.GET) String …

Spring BootでBean Validation (3) バリデーション処理を自作

ti-tomo-knowledge.hatenablog.com ti-tomo-knowledge.hatenablog.com上記2つのような流れで、BeanValidationにおける基本的なバリデーションの流れを見ていきましたが、 これらはあくまでBeanValidationやHibernateで事前に用意されたものです。 実際にサー…

Spring BootでBean Validation (2) エラーメッセージの多言語化

まずはti-tomo-knowledge.hatenablog.comを参考にしてmessage.propertiesを使って多言語化する流れを見てほしいです。 これを使えばバリデーション時のエラーメッセージの対応もすぐできます。Bean Validation のアノテーションは、通常messageというパラメ…

Spring Boot Thymeleafで多言語化

多言語対応でサイトを作ることが多い現代だからなのか、 最近のフレームワークは多言語対応がとても簡単です。ここではThymeleafに表示される文字を多言語対応する方法を共有します。 基本的にはmessages_ja.propertiesや、messages_en.propertiesというよう…

Spring BootでBean Validation (1) @GroupSequenceで順番にチェック

Spring Bootでは(Spring Boot以外にもBean Validation使ってるやつ全部ですが)、Serializableクラスに対して 「org.hibernate.validator.constraints」や「javax.validation.constraints」を使って、 @NotEmptyや@Sizeといったようにアノテーションを使うだ…

PHPとJavaのthis事情

プログラムを始めたばかりの人は、 ある程度の規模のソースを書くまでthisの意味を理解するのが大変ですよね。 PHPもJavaもthisの使い方は基本的には同じで、 あるクラスのメンバ変数やメソッドを指定する時に使います。 ちょっと違う点としては、Javaの方は…

JavaEE7でHello, World

ti-tomo-knowledge.hatenablog.comでJFSを使ったFaceletsについて書きましたが、ここからは具体的にFaceletsを使った動作確認をしてみたいと思います。 まずは簡単に「Hello, World」の出力からです。 どこをググってもEclipseを使ったものの説明が多いので…

JSPはもう古い?Faceletsとは

8年くらい長い間JavaEEに触れてこなかったのですが、 最近触れてみるとかなり技術が変化していて驚きました。特に昔はJSPでビュー側を書いていたのに、最近ではFaceletsというものが出てきて いわゆるxhtml形式で書くのが主流になってきているんですね。 自…

Spring Securityで複数のログイン機能を作る時、鍵を握るのは@Order

ti-tomo-knowledge.hatenablog.comまでで基本的なログイン機能のご紹介まで行いましたが、 実際Webアプリを作り出すと、「ユーザ用のログイン画面」、「管理者用のログイン画面」といったように、 ログイン画面を複数用意しなければいけない場面があるのでは…

@Builderのクラスに引数なしのコンストラクタを設置したい

@BuilderはLombokにより使えるライブラリで、 エンティティ呼び出し時にbuilderの生成を簡単にしてくれます。仕組みとして、例えば @Builder public class Test() { private int id; private String name; } とすれば、実際には以下のようなコンストラクタが…

Spring Securityを使ったログイン機能 (3)ログイン処理の実装

ti-tomo-knowledge.hatenablog.comにて、アカウント情報の登録まで行いましたが、 次は実際にログイン機能を実装してみます。 ※認証失敗時など、細かい処理まで書くと長くなってしまうので、今回は認証が必ず成功するパターンで書きます。WebSecurityConfigu…

Spring Securityを使ったログイン機能 (2)ユーザ情報登録フォームの実装

ti-tomo-knowledge.hatenablog.comにて、ログイン認証されていない時にログイン画面に遷移される処理の説明をしましたので、 次にログイン画面の実装...に行きたいのですがその前に、 そもそも認証先のデータを用意する必要がありますよね。 そこで今回はユ…

Spring BootのCSRFトークン

Spring BootにおけるCSRF対策でのformタグへのトークン付与はとても簡単です。 「spring-boot-starter-security」というライブラリを使い、 formタグに対して、「th:action=〜」の記述をすれば自動的に付与されるのです。実際に試してみると、 <input type="hidden" name="_csrf" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"> のようなタグ…

Spring Securityを使ったログイン機能 (1)未ログイン時の画面遷移

Spring BootにはSpring securityという認証と認可を司るコンポーネントがありますが、 これを使いながら数回に分けてログイン機能を実装したいと思います。 未ログイン時にログインフォームに遷移する動きから、最終的にはデータベースのユーザデータと認証…

Intellijで動かすSpring Boot

Springのフレームワークといえば、Eclipseのプラグイン(STS)で動かす方法が有名ですが、 Spring BootともなるとIntellijでも容易に動かせます。 実験的にHello Worldを出力したのですが、非常に簡単だったのでやり方を共有です。<バージョン情報> Java:1.…

スタンドアロンってどういう意味?

Javaの開発を始めてからスタンドアロン(stand alone)という言葉をよく見かけるようになりました。 (特にJavaは関係なくたまたまだと思うけどw)意味合いとしては、他のリソースに依存せず、単独で動くということらしいです。 単語の意味通りですねwほんとIT…

Spring Framework IntellijでHello World!!

Spring Frameworkでの初期設定は、どこを見てもEclipse(STS)を使った方法ばかりですよね。 でも私はIntellijに慣れてしまっているので(ショートカットとか覚えるの面倒だし( ´Д`))、 できればIntellijでできるようにしたいと考えました。以下で「Hello Wo…

SPAとAMPを共存させたサイト

私が個人的に運営しているサイトで、ページごとにSPAとAMPページを切り替えています。 技術はサーバサイドはJavaのSpring Bootを使い、フロントはvue-cliによるVue.jsを使用しています。詰まった点としては、Thymeleafの厳しい文法チェックエラーの対応です…

PlayframeworkのEvolution

Playframeworkではマイグレーションを行う時にEvolutionを使えます。 モデルを書いてからブラウザを開くと、勝手にSQLのDDLを作成してくれてデータベースに反映できるわけです。 ただ、通常の設定では毎回1.sqlにDDLが作成されてデータベースが毎回削除され…