VAADIN + TomEE上のWebアプリケーションにJAASを使用する

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

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."; } } 

ServiceLoaderLoginProviderをロードできるようにするには、プロジェクトディレクトリ/ 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で入手できます

また、 デモ

参照:


  1. Apache TomEEの公式Webサイト
    tomee.apache.org/index.html
  2. 公式サイトVAADIN
    vaadin.com
  3. JAASおよびTomEE
    tomee.apache.org/tomee-jaas.html
  4. セキュリティトーム
    tomee.apache.org/security.html
  5. 簡単なログインビューの作成
    vaadin.com/wiki/-/wiki/Main/Creating%20a%20simple%20login%20view

Source: https://habr.com/ru/post/J183550/


All Articles