Jaas、Java Authentication and Autorisation サービスを使用しようとしています。サーバーは App Engine なので、web.xml を編集することはできません。次のようなサーブレット フィルターを使用しています。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
LoginContext lc = new LoginContext("JaasSample", new AuthenticationCallbackHandler());
lc.login();
chain.doFilter(request, response);
lc.logout();
} catch (LoginException e) { /* lc.login() fails */}
}
LoginContext を呼び出すと、ポリシーがチェックされ、次の例外がスローされます。
java.security.AccessControlException:
access denied (javax.security.auth.AuthPermission createLoginContext.JaasSample)
私が使用しているコードは、Oracleリファレンスからのものです。彼らは、Security Manager が存在する場合、この方法でいくつかの権利を付与する必要があると説明しています。
grant {
permission javax.security.auth.AuthPermission "createLoginContext.JaasSample";
}
これがJARで作成される理由がわかりません。
実行構成で -D--enable_all_permissions=true を使用すると、このチェックをバイパスできます。(ただし、これはprodに入るために解決されるため)そして、Jaas構成ファイルは System.getProperty("user.home")/.java.login.config で検索されます。むしろプロジェクトのリソースにあるのではないですか? これはローカル/本番環境でどのように機能しますか?
構成ファイルは次のようになります。
JaasSample {
com.sun.security.auth.module.Krb5LoginModule required;
};
本当にありがとう。
ps。Spring Security は Jaas で使用でき、App Engine で動作します。pps。Spring Security は、App Engine の起動を遅くする Spring コンテキストを開始するため、使用できません。そして、この環境での起動は常に行われます。