1

私はここで Java Web プロジェクトの問題に直面しています。私が取り組んでいるプロジェクトは、標準の jsp と jsf ページを混同して作成されています。main.jsp と呼ばれるアプリケーションのメイン ページは、ユーザーの認証を確認するために使用されるサーブレット フィルター内に作成されたセッション スコープを持つマネージド Bean にアクセスする必要がある標準の jsp ページです。私のweb.xmlでは、facesエンジンが.jsfおよび/faces/*リクエストに応答する必要があるように設定しました

  <filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>/faces/*</url-pattern>
  </filter-mapping>

アプリケーションを開くと、http//myserver/myapp/faces/main.jspすべて正常に動作します。でアプリケーションを開くとhttp://myserver/myapp/main.jsp、faces コンテキストがまだ作成されていないため、エラーが発生します。ウェルカム ページを設定することも、Apache リダイレクトを設定することもありません。ユーザーがブラウザで h**p://myserver/myapp と入力するだけで、アプリケーションが適切なページ (faces コンテキスト内の main.jsp) を開くことができます。これは、ページ /faces/main.jsp が物理的に存在しないためです。

私は2つの解決策があると思います.facesコンテキストを/faces/*パターンの外でも開始できるようにするか、ページが存在しない場合でもTomcatを/faces/main.jspにリダイレクトさせる方法を見つける.. .しかし、私が試みたすべてに失敗しました。

4

1 に答える 1

1

http://myserver/myapp/main.jspではなく、http://myserver/myapp/faces/main.jspまたは (より望ましい) http://myserver/myapp/mainでアプリケーションを開かないでください。 jsf .

あなたの全体的な懸念が、エンドユーザーが外部の JSP ページにアクセスできないようにすることurl-patternである場合FacesServlet(そうでなければ、この質問はあまり意味がありません ;))、パターンを選択し、パターンに空のonパターンを*.jsf追加します。 . これにより、エンドユーザーがURL を直接要求できないように注意する必要があります。security-constraintauth-constraint*.jspweb.xml*.jsp

<security-constraint>
    <display-name>Restrict direct access to JSP files</display-name>
    <web-resource-collection>
        <web-resource-name>JSP files</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint> 

/faces/*マッピングを使用している場合、これは直接可能ではありません。私もそれを取り除きweb.xmlます。

さらに、http://myserver/myappmain.jsfと入力しているエンドユーザーに対応するには、 aswelcome-fileを定義してweb.xml、他の定義済みのウェルカム ファイルを削除します。ただし、Tomcat (および場合によっては他のサーブレット コンテナー) では、ファイルがディスク上に存在することをサーバーにだますために、正確にその名前の空のファイルを作成する必要があります。

于 2010-08-02T11:21:56.040 に答える