サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
セキュリティ
momijiame.hatenadiary.org
前回のフィルタの例はあまりにも実用性がなかったので、もう少し実用性のある例を書いてみました。ContainerRequestFilter と ContainerResponseFilter を組み合わせてリソースの処理時間を測るフィルタです。 package test.jersey.filter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.ws.rs.core.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sun.jersey.spi.container.ContainerRequest; import com.sun.jersey
フロントエンドの HTML やアプリケーションと WebAPI を別々に開発すると、ビューとロジックをほぼ完全に分離できます。それぞれの責務が絞られるので、もともと不具合が生じにくいというのもありますが、何より WebAPI は単体テストが書きやすいという点で優れていると思います。 とはいえ、単体テストを実行する環境を整えるのは意外と面倒かもしれません。以前のエントリでも書きましたが、アプリケーションをデプロイしたサーバを立ち上げてテストを走らせてサーバを落とす、という一連の流れはなるべく簡単に実行したいものです。 もし WebAPI を Jersey (JAX-RS) で開発するのであれば、そうしたニーズに答えるためテスト用のフレームワークが用意されています。 テストする対象を用意する まずはテストする対象を作らないと始まりません。今回準備したリソースは以下です。 package tes
今回は Jersey (JAX-RS) で作った WebAPI でアクセス制御を行う方法について書きます。 JAX-RS は J2EE の仕様である以上、アクセス制御をロール単位で行う点に変わりはありません。とはいえ、アプローチの方法は複数あります。主に 3 つです。 1. web.xml (など) で設定する 2. アクセス制御用のフィルタを使う 3. SecurityContext を元に自分でロジックを書く 上記 3 つやり方についてサンプルを元に解説します。 サンプル まずは web.xml です。 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSc
トランザクション管理って面倒ですよね。JPA を使うときを考えると、まず EntityManagerFactory を作って、EntityManager を取得して、EntityTransaction を取得して、開始して、コミットして、例外が上がったらロールバックして…。うーん、継承などで処理を親クラスにまとめるにしても、どうもイマイチな感じが拭えません。 EJB ならコンテナが管理してくれる?いや EJB はちょっと…。Spring の AOP はどうか?いや大量の XML に悩まされるのはちょっと…。そんな好き嫌いの激しいぼく的には、シンプルな DIコンテナ Google Guice の AOP を使ってトランザクション管理ができるとうれしいなー、と思いました。最初は自分でインターセプターを書こうと意気込んでいたんですが、何とモジュールが既にあったのでこれ幸いと使ってみました。 ソー
RabbitMQ というメッセージ指向ミドルウェアが便利らしい、という話を聞いて使ってみました。メッセージ指向ミドルウェアそのものの説明は他におまかせして、公式の Tutorial を試して便利に思った機能について書いてみます。 準備 RabbitMQ は使う前にマシンへのインストールが必要です。今回は OSX で試しました。インストールには Homebrew を使いました。 $ brew install rabbitmqRabbitMQ のサーバは rabbitmq-server コマンドで実行します。 $ rabbitmq-server Hello World まずは単純にキューにメッセージを入れて取り出すだけのプログラムです。 キューにメッセージを入れるプログラムです。RabbitMQ (AMQP?) の用語でプロデューサというようです。 package test.rabbitmq.
ついに RFC6455 (WebSocket) が出ましたね!ぼくも興味津々です。 ということで今回は Jetty の WebSocket サーバ/クライアント実装を使ってみます。 サーバ 今回作ったサーバのソースは以下の通りです。 import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.eclipse.jetty.websocket.WebSocket; import org.eclipse.jetty.websocket.WebSocket.Connection; import org.eclipse.jetty.websocket.WebSocketServlet; import org.slf4j.Logger; import org.slf4j.LoggerFacto
Jerseyのバージョン1.9.1で追加されたCSRFをステートレスに防ぐフィルタが興味深かったので、そのメモです。 CSRF対策の手法 通常、CSRF攻撃を防ぐにはトークンを使う方法があります。サーバがクライアントにトークンを発行して、クライアントは発行されたトークンをクエリパラメータなどの形でリクエストに付与します。サーバはトークンが付与されていないリクエストを実行しません。攻撃者は発行されたトークンを知らないため、リクエストを実行できないという寸法です。 CSRF対策とステート ただし、この方法ではトークンの取得〜リクエストの発行にステートができるため、WebAPIがステートフルになってしまうという問題があります。RESTベースのWebAPIはやはりステートレスに作りたいところです。 そこで、JerseyのCSRF対策フィルタはステートレスになるよう作られています。 JerseyのC
JAX-RS を使っていると、リソースの処理が呼ばれる前か後に何らかの処理をはさみたい、ということがあると思います。Jersey ではそういったニーズにフィルタで対応できます。 Jersey のフィルタにはリクエスト/レスポンスを一律処理するフィルタ (ContainerRequestFilter, ContainerResponseFilter) と、各リソースで個別に設定できるフィルタ (ResourceFilter) の二種類があります。 ContainerRequestFilter まず ContainerRequestFilter ではリクエストに対して一律、リソースの処理が実行される前の処理が記述できます。例として、実用性皆無ですが HTTPメソッド をすべて PUT に書き換えるフィルタを書いてみます。 package test.jersey.filter; import c
Jersey には OAuth で認証するためのモジュールが用意されています。今回はそれを使ってみた時のメモです。内容的には JAX-RS を使ったことがあることを想定しています。 まず、あらかじめ Twitter Developers でアプリケーションを登録して Consumer Key と Secret Key を手に入れておきます。また、OAuth サービスプロバイダ (今回は Twitter) での認証後にリダイレクトしてもらう URI を登録しておきましょう。 https://dev.twitter.com/ OAuth を使うのに必要な jar は以下の 3 つ。Jersey の Web サイトや、あるいは Maven を使ってリモートリポジトリから手に入れておきます。 http://jersey.java.net/ oauth-client-{version}.jar oa
このページを最初にブックマークしてみませんか?
『momijiame.hatenadiary.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く