本番サーバー (Debian の Glassfish 3.1.2.2) で保護されたページにアクセスすると、次のエラーが発生します。
java.net.MalformedURLException: access denied ("org.osgi.framework.AdminPermission" "(id=222)" "resolve,resource")
サーバー ログ (以下を参照) によると、エラーはアクセスの拒否に関するものですが、私のログイン スクリプト (JAAS を使用) は正常に動作しています。
[#|2013-06-15T09:25:49.362-0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=86;_ThreadName=Thread-2;|START OF PHASE RESTORE_VIEW 1|#]
[#|2013-06-15T09:25:49.368-0400|INFO|glassfish3.1.2|javax.enterprise.system.core.security|_ThreadID=86;_ThreadName=Thread-2;|JACC Policy Provider:Failed Permission Check: context (" BFjsf/BFjsf ") , permission (" ("org.osgi.framework.AdminPermission" "(id=222)" "resolve,resource") ") |#]
[#|2013-06-15T09:25:49.371-0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=86;_ThreadName=Thread-2;|END OF PHASE RESTORE_VIEW 1|#]
[#|2013-06-15T09:25:49.374-0400|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=86;_ThreadName=Thread-2;|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.net.MalformedURLException: access denied ("org.osgi.framework.AdminPermission" "(id=222)" "resolve,resource")
at java.net.URL.<init>(URL.java:619)
at java.net.URL.<init>(URL.java:482)
驚いたことに、開発セットアップ (Windows + Netbeans 7.3) ではエラーが発生せず、有効な SSL 証明書を持つオンライン サーバーでのみエラーが発生します。
この問題は、セキュリティ上の制約がある保護されたページにアクセスしようとするたびに発生します。つまり、ブラウザーに表示されるアドレスが /pages/... ディレクトリの下にある場合に発生します (JSF によって表示されるアドレスは常にページの背後にあります)。
例: https://labottedefoin.org/BFjsf/pages/membres/Lister.xhtml?cid=1
web.xml ファイルのセキュリティ制約で定義されているとおり:
<security-constraint>
<display-name>Authentification</display-name>
<web-resource-collection>
<web-resource-name>pages securisees</web-resource-name>
<url-pattern>/pages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>usagers_actifs</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<display-name>Accueil securise</display-name>
<web-resource-collection>
<web-resource-name>accueil securise</web-resource-name>
<url-pattern>/accueil_secure.xhtml</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>BF_realm_config</realm-name>
</login-config>
<security-role>
<description>Rôle correspondant aux usagers ayant «membres_actifs» dans la colonne «groupes» de la table «membres_jaas_authen»</description>
<role-name>usagers_actifs</role-name>
</security-role>
~/glassfish/domains/domain1/config/server.policy に (デフォルトで) osgi モジュールの承認が含まれていることを確認しました:
// Felix classes get all permissions by default
grant codeBase "file:${com.sun.aas.installRoot}/osgi/felix/bin/-" {
permission java.security.AllPermission;
};
必要な権限を(次のように)追加しようとしましたが、うまくいきませんでした:
// Felix classes get all permissions by default
grant codeBase "file:${com.sun.aas.installRoot}/osgi/felix/bin/-" {
permission java.security.AllPermission;
permission org.osgi.framework.AdminPermission "(id=222)", "resolve,resource";
};
適切なセクションまたは適切なファイルで権限が付与されていない可能性があります。
誰もこの問題を解決する方法を知っていますか? 前もって感謝します。