CodeZine(コードジン)

特集ページ一覧

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

第3回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/05/26 14:00

目次

アクセス制御

 次に作成した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>

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

バックナンバー

連載:Spring FrameworkとCurl ORBを用いたアプリケーション開発

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5