VAADIN 7 (Webフレームワークとして)および
Apach TomEE (Java EEコンテナーとして)を使用するWebアプリケーションでの
JAAS (Java Authentification and Authorization Service)の使用についてお話したいと
思います。
最初に、コンテナに
レルムを登録し、
LoginModule
をそれに関連付ける必要があり
LoginModule
。
これは、コンテナのserver.xmlファイルまたはアプリケーションファイル/src/main/webapp/META-INF/context.xmlで実行できます。
<Realm className="org.apache.catalina.realm.JAASRealm" appName="ServiceLoginModule" userClassNames="org.apache.openejb.core.security.jaas.UserPrincipal" roleClassNames="org.apache.openejb.core.security.jaas.GroupPrincipal"> </Realm>
ServiceLoginModule
の構成は、login.configファイルにあります
ServiceLoginModule { org.apache.openejb.core.security.jaas.ServiceProviderLoginModule required; };
そのためには、システムプロパティを
CATALINA_OPTS: -Djava.security.auth.login.config=$CATALINA_BASE/conf/login.config
または、アプリケーションコードで直接実行します。
System.setProperty("java.security.auth.login.config", “yourPath/login.config");
TomEEにはいくつかの
LoginModule
実装があり
LoginModule
。
- PropertiesLoginModuleは、ユーザーとグループを2つのファイル(users.propertiesとgroups.properties)に表示します。
- SQLLoginModuleはデータベーステーブルを使用します。
- ServiceProviderLoginModuleはServiceLoaderを使用して独自のLoginProvider実装をロードします。
- ScriptLoginModuleはJava Scripting APIを使用します。
ServiceProviderLoginModule
を使用して、
LoginProvider'a
独自の実装を記述します。
public class SimpleLoginProvider implements LoginProvider { @Override public List<String> authenticate(String user, String password) throws FailedLoginException { if ("admin".equals(user) && "admin".equals(password)) { return Arrays.asList("ADMIN"); } if ("user".equals(user) && "user".equals(password)) { return Arrays.asList("USER"); } throw new FailedLoginException(); } }
成功した認証済みユーザーのロールのリストを返す
authenticateメソッドが含まれています。 私たちの場合、このメソッドの実装は非常に簡単です(このメカニズムの仕組みとアクセス権管理の仕組みを示すため)。認証が成功した後、それぞれADMINとUSERのロールを取得する管理者とユーザーは2人だけです。
これで、
@RolesAllowed("ADMIN")
アノテーションを使用して、メソッドへのアクセスを制限できます。
@Stateless public class TestBean { @RolesAllowed("ADMIN") public String getProtectedInfo() { return "It's protected information."; } }
ServiceLoaderが
LoginProvider
をロードできるようにするには、プロジェクトディレクトリ/ src / main / resources / META-INF / services /に
org.apache.openejb.core.security.jaas.LoginProvider
ファイルを作成する必要があります。 :
org.psa.vaadinauth.secure.SimpleLoginProvider
authenticateメソッドを直接呼び出す必要はありません
HttpServletRequest'a
から
loginメソッドを呼び出した後にコンテナがこれを行い
ます 。 承認のためにWebフォームに入力した後、次のメソッドを呼び出します。
public void login(String user, String password, HttpServletRequest request) throws ServletException { request.login(user, password); }
Vaadinには、静的
getCurrentRequestメソッドを含む独自のVaadinServiceがあり、
HttpServletRequest
変換して、
ログインメソッドに渡し
ます 。
login(username, password, (HttpServletRequest) VaadinService.getCurrentRequest());
ページ間のリダイレクトとナビゲーションのために、Vaadinには非常に便利な
Navigatorコンポーネントがあります。 まず、必要なビューを追加する必要があります。
getNavigator().addView(LoginView.NAME, LoginView.class); getNavigator().addView(MainView.NAME, MainView.class);
そして、
navigateToメソッドを呼び出してそれらの間を移動します。
getNavigator().navigateTo(LoginView.NAME);
ここで重要なポイントを
紹介しました 。プロジェクトのソースコードは
GitHubで入手でき
ます 。
また、
デモ 。
参照:
- Apache TomEEの公式Webサイト
tomee.apache.org/index.html - 公式サイトVAADIN
vaadin.com - JAASおよびTomEE
tomee.apache.org/tomee-jaas.html - セキュリティトーム
tomee.apache.org/security.html - 簡単なログインビューの作成
vaadin.com/wiki/-/wiki/Main/Creating%20a%20simple%20login%20view