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



All Articles