SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Spring FrameworkとCurl ORBを用いたアプリケーション開発(AD)

Spring FrameworkとCurl ORBを用いたアプリケーション開発
ユーザ認証とアクセス制御

第3回

  • このエントリーをはてなブックマークに追加

アクセス制御

 次に作成したUserInfoを用いて、アクセス制御機能を追加していきます。ここでは、ログインに成功した場合のみ以下のSecureServiceサービスにアクセスできるようにします。

SecureService.java(サービス)
package sample;

import org.springframework.stereotype.Service;
import com.curlap.orb.security.RemoteService;

@RemoteService
@Service("secure")
public class SecureService {
	
	public String doSomething() {
		return "Did something!!";
	}
}

 このSecureServiceには、ログイン済みの場合にはアクセス可能、未ログインの際にはアクセス不可という制御をかけることにします。こういった処理は通常SecureServiceだけではなく、多くのサービスを制御することとなるため、AOPを使い共通機能として作っていきます。

 AOPを使って各メソッドの実行前にアクセスチェック機能を設けるため、MethodBeforeAdviceを継承したクラスを作成し、beforeメソッドを実装します。

ServiceBeforeAdvice.java(アクセス制御)
package sample;

import java.lang.reflect.Method;
import javax.annotation.Resource;
import org.springframework.aop.MethodBeforeAdvice;

public class ServiceBeforeAdvice implements MethodBeforeAdvice {

	@Resource
	private UserInfo userInfo;

	public void before(Method method, Object[] args, Object target) throws Throwable {
		if (!userInfo.isHasLogined()) {
			throw new AuthException("Authentication error!!");
		}
	}
}

 ここでは、UserInfoのhasLoginedがfalseであれば、ログインに成功していないこととなるので、AuthExceptionという例外をスローするようにします。もしhasLoginedがtrueであれば、ログインに成功していますので、SecureServiceのメソッドにアクセスできるようにします。

AuthException.java(認証例外)
package sample;

/*
 * AuthException 
 *   NOTE: extends RuntimeException due to AOP
 */
public class AuthException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	public AuthException() {
		super();
	}

	public AuthException(String message) {
		super(message);
	}

	public AuthException(String message, Throwable rootCause) {
		super(message, rootCause);
	}

	public AuthException(Throwable rootCause) {
		super(rootCause);
	}
}
注意

 AuthExceptionは、RuntimeExceptionを継承したクラスです。

 このServiceBeforeAdviceをSpringの設定ファイル(applicationContext.xml)に設定するため、以下の行を追加します。

<aop:config>
    <aop:advisor pointcut="execution(* sample.SecureService.*(..))"
                 advice-ref="before"/>
</aop:config>
<bean id="before" class="sample.ServiceBeforeAdvice" />

 もし、SecureService以外のサービスも追加するには上記のpointcutを修正してください。

 これで、認証とアクセス制御の機能ができました。web.xmlに以下のリスナーを追加して、サーバを起動してください。

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

次のページ
テスト実行

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Spring FrameworkとCurl ORBを用いたアプリケーション開発連載記事一覧
この記事の著者

岡田 一志(オカダ ヒトシ)

大企業向けSI開発、IT基盤設計/構築やiDC設立プロジェクトの企画/開発/運用など幅広く活躍し、2006年にCurlに参画する。米Curl社(マサチューセッツ)にてCurl Core RTEの設計・開発に従事した後、現在は株式会社カールにて、Innovation Centerのオペレーションおよび...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3857 2009/05/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング