0

Tomcat 7.0 で Eclipse IDE を使用しています。

私は今、私が持っているWebアプリケーションで、Webアプリケーションを持っています:

  1. MainPage.html
  2. Servlet1(ジャバクラス)
  3. 一部の jsp ファイル。(一部は管理者専用です。たとえば、driving_page.jsp)

メイン ページには、サーブレットにリダイレクトするフォーム内に 4 つのボタンがあります。1つのボタンをクリックすると、サーブレットに移動し、サーブレットはリダイレクトしますdriving_page.jspが、最初にページを表示する必要があり、login.jsp表示されませんでした..

クロムでは、私は Driving_page URL を入力しlocalhost:8080/TaxiWeb/driving_page.jsp 、ページを表示する前に、login.jsp必要に応じて ' ページを表示します。

しかし、上記のボタンをクリックすると、ページをMainPage.htmlスキップしてlogin.jsp直接ページに移動しdriving_page.jspます。なぜ?

注:driving_page.jspファイルは FOLDER:AdminPages.. 内にあるためurl-pattern、ファイルweb.xml内は正しいです。

tomcat-users.xml:

<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>  
  <user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>

my web.xml file:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<security-constraint>
  <web-resource-collection>
      <web-resource-name>Driving page</web-resource-name>
      <url-pattern>/AdminPages/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
      <role-name>role1</role-name>
  </auth-constraint>
  </security-constraint>
  <security-role><role-name>role1</role-name></security-role>

  <login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/login_error.jsp</form-error-page>
  </form-login-config>
  </login-config>
  !-- ********************************************************************** -->
  <servlet>
     <servlet-name>Servlet1</servlet-name>
     <servlet-class>pack.servlets.servlet1</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>Servlet1</servlet-name>
     <url-pattern>/Servlet1</url-pattern>
   </servlet-mapping>

およびサーブレット コード: 注: 前述のボタン コードをサーブレットに追加するだけです。

    else if (request.getParameter("submit").equals("Show Taxis at Driving"))
{
   request.getRequestDispatcher("AdminPages/driving_page.jsp").forward(request,response);
}
4

2 に答える 2

2

あなたの問題は、サーブレット仕様 13.2 (宣言型セキュリティ)に該当します

セキュリティ モデルは、Web アプリケーションの静的コンテンツ部分、およびクライアントから要求されたアプリケーション内のサーブレットとフィルタに適用されます。またはインクルード。

基本的に、セキュリティ制約は最初のリクエストによってのみ取得され、サーブレット転送によって無視されます。

これを修正するには、すべての安全な JSP を WEB-INF フォルダーの下に移動して、直接アクセスできないようにします。そこへの転送パスを更新します。次に、JSP ではなくサーブレットをカバーするようにセキュリティ制約を指定します。

于 2012-08-23T12:46:40.497 に答える
0

ここでは、を使用する必要がありますresponse.sendRedirect(String location)。このメソッドは、ステータスコードと新しいページの場所とともに応答をブラウザに返します。これで、ブラウザはリダイレクトされた「場所」に対して新しいリクエストを再度送信します。
ここでは、FilterそのURLにを含める必要があり、そのフィルターで、ユーザーがこのページの表示を許可されているかどうかを確認する必要があります。

于 2012-08-23T14:03:00.163 に答える