2012-02-19 4 views
5

netbeansを使用してJava EE6とGlassFish3について見つけた素晴らしいガイドを使用してログインページを作成しました。 ログインページにアクセスしようとするとプロジェクトを展開した後、GlassFishサーバーから「HTTPステータス403 - 要求されたリソースへのアクセスが拒否されました」というメッセージが表示されます。実装されたログインページに到達しようとするとglassfish 3のHTTPステータス403エラー

私が使っているURLは:http://localhost:9999/simplewebapp/admin/admin.jsp 私が作成したログインページに自動的にリダイレクトされるはずです。

代わりに上記のエラーが表示されます。 glassfish3のログを見ると、私は上記のURLを入力するときに私はこれらの2つの行を取得しています。

INFO:JACCポリシー・プロバイダ:失敗パーミッションチェック:コンテキスト( "simplewebapp/simplewebapp ")、許可("(javax.security.jacc.WebUserDataPermission /admin/login.jsp GET)") INFO:JACCポリシー・プロバイダ:失敗パーミッションチェック:コンテキスト( "simplewebapp/simplewebapp ")、許可("(javax.security.jacc.WebUserDataPermission /admin/login.jsp GET:CONFIDENTIAL)")

いくつかの詳細:

ウェブ.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <security-constraint> 
     <display-name>Admin Pages</display-name> 
     <web-resource-collection> 
      <web-resource-name>Administrative Pages</web-resource-name> 
      <description/> 
      <url-pattern>/admin/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <description>admin</description> 
     </auth-constraint> 
    </security-constraint> 
    <login-config> 
     <auth-method>FORM</auth-method> 
     <realm-name>file</realm-name> 
     <form-login-config> 
      <form-login-page>/login.jsp</form-login-page> 
      <form-error-page>/loginerror.jsp</form-error-page> 
     </form-login-config> 
    </login-config> 
    <security-role> 
     <description>Administrators</description> 
     <role-name>admin</role-name> 
    </security-role> 
    <security-role> 
     <description>Users</description> 
     <role-name>user</role-name> 
    </security-role> 
</web-app> 

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <security-role-mapping> 
    <role-name>admin</role-name> 
    <group-name>appadmin</group-name> 
    </security-role-mapping> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class' java code.</description> 
    </property> 
    </jsp-config> 
</glassfish-web-app> 

私はここで間違っていますか? ありがとうございます。

+0

adminフォルダ内にlogin.jspが見つかりませんか? – skiabox

+0

私のlogin.jspファイルは、ダウンロードした本のコードと同じように、アプリケーションのルートディレクトリにあります。 – skiabox

答えて

3

問題が解決しました。私は、glassfish-web.xmlにプリンシパル名を追加し、web.xmlにrole-nameを追加する必要がありました。 正しいファイル:

ウェブ-XML、これは私のために働いたGlassFish管理コンソールを使用し

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <security-constraint> 
     <display-name>Admin Pages</display-name> 
     <web-resource-collection> 
      <web-resource-name>Administrative Pages</web-resource-name> 
      <description/> 
      <url-pattern>/admin/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <description>admin</description> 
      <role-name>AdminRole</role-name> 
     </auth-constraint> 
    </security-constraint> 
    <login-config> 
     <auth-method>FORM</auth-method> 
     <realm-name>file</realm-name> 
     <form-login-config> 
      <form-login-page>/login.jsp</form-login-page> 
      <form-error-page>/loginerror.jsp</form-error-page> 
     </form-login-config> 
    </login-config> 
    <security-role> 
     <description>Administrators</description> 
     <role-name>AdminRole</role-name> 
    </security-role> 
    <security-role> 
     <description>Users</description> 
     <role-name>UserRole</role-name> 
    </security-role> 
</web-app> 

のglassfish-web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <security-role-mapping> 
    <role-name>AdminRole</role-name> 
    <principal-name>admin</principal-name> 
    <group-name>appadmin</group-name> 
    </security-role-mapping> 
    <security-role-mapping> 
    <role-name>UserRole</role-name> 
    <principal-name>user</principal-name> 
    <group-name>appuser</group-name> 
    </security-role-mapping> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class' java code.</description> 
    </property> 
    </jsp-config> 
</glassfish-web-app> 
+0

グラスフィッシュのバグにも注意してください:http://java.net/jira/browse/GLASSFISH-19064。参照:http://stackoverflow.com/questions/12268255 – igr

0

:記載されている

を選択し 'サーバー設定' を「構成」で「セキュリティ」ページにアクセスします。そのページの では、「デフォルトのプリンシパルからロールへのマッピング」オプションを有効にする必要があります。このオプションを有効にするメリットは、 を使用せずにユーザー用に定義されたロールをすぐに使用できるようにして、プロジェクトのglassfish設定ファイルで正式なXML宣言を行う必要があることです。

0

"標準"にしておくと、これはより良いオプションだと思います。なぜなら、Webコンテナ(例えば、Tomcat)だけを使用しているのであれば、ただの領域だけを設定する必要がないからです。私の場合、私はEclipseを使用していたので、プロジェクトをアンデプロイして再デプロイしなければなりませんでした。

ありがとうございました。

関連する問題