-1

NTLM認証を行っているサーブレットクラスがあり、成功した場合はJSPページに転送しています。

JSP ページには、いくつかの登録情報を入力してページを送信するユーザー フォームがあります。ServiceController と呼ばれる別のサーブレットでは、次を使用してすべてのフォームの詳細を取得しています

request.getParameter("");

私が直面している問題は、サーブレットから JSP ページにリダイレクトしている場合request.getParameter("");はすべて null ですが、JSP ページに直接アクセスしている場合は、次を使用してすべてのフォーム値を正常に取得できますrequest.getParameter("");

Login Servlet クラスから JSP ページにリダイレクトしている場合、Servlet でフォーム値を取得できないのはなぜですか?

リダイレクトしているサーブレットコード

public void doGet(HttpServletRequest request, 
                  HttpServletResponse response) throws ServletException, IOException {

    response.setContentType(CONTENT_TYPE);        
    String auth = request.getHeader("Authorization");
    ...

   if (findUsername(uname) == true) { 
   response.sendRedirect("myForm.jsp");
   return;
           } else {
        response.sendRedirect("accessdenied.jsp");
        return;

どんな助けも非常に高く評価されています

4

4 に答える 4

3

response.sendredirect() メソッドは完全に新しいリクエストを呼び出すため、以前のリクエストの値にアクセスすることはできません。requestdispatcherを使用する か、セッションで値を設定して jsp ページで読み取ることができます

于 2013-04-08T07:03:32.883 に答える
3

ここでは 2 つの別々の概念が進行中であり、それらを混同していると思います。

リクエストの処理を開始したら、いくつかのオプションがあります。

  • 応答を停止します (意図的かどうかに関係なく、コンテナーが何らかの処理を行います)。
  • を使用してリクエストをリダイレクトHttpServletResponse.sendRedirectします。HTTP で応答し302、ブラウザを識別されたページに送信します。リダイレクトを使用して、サーバーからそれらを送信することもできます.
  • RequestDispatcher.forward( はRequestDispatcherからアクセスできます)を使用してリクエストを転送しServletRequest.getRequestDispatcherます。これにより、リクエストを処理するために別のサーブレット/JSP にリダイレクトされます。これはユーザーにはまったく見えず、要求された URL はリダイレクトとは異なり変更されません。転送されたリクエストはサーバー上のどこかに送られる必要があり、明示的に通知されない限り、ユーザーはリクエストが転送されたことを知る方法がありません。転送されたリクエストはAttribute、サーブレット間でパラメーターを渡すクリーンな方法である を含むパラメーターを保持します。

あなたの場合、ログインに成功したときにセッションを設定してから取得したいという要望に言及しました。これらの概念は互いに完全に独立しています。

this.validUserチェック内にセッションを設定してから、転送/リダイレクトできます。では、else実際に障害を指摘するためにリダイレクトすることを選択できます。

于 2013-04-08T07:06:20.550 に答える
2

リダイレクトは、リクエスト/レスポンスの転送とは異なります。リダイレクトの場合、制御タスクの転送がコンテナによってブラウザに委任され、ブラウザは指定された URL に新しいリクエストを生成し、古いリクエストおよびレスポンス オブジェクトは失われます。

于 2013-04-08T07:03:52.713 に答える
0

すべてのフォーム要素が null であるという問題を解決しました。これNTLMは、 Login にある認証コードの問題でしたservlet

JCIFSドメインにログインしているユーザー名を取得するために (samba.org) ソリューションを使用しています。ドメインにログインしているユーザー名を取得するために使用していたがらくたコードを完全に削除し、これに従いました

于 2013-04-11T07:54:30.507 に答える