-1

ログインページでユーザーを承認したい。1 つのログイン ページ を作成しましlogin.jspた。ログイン フォームがあります。フォームを送信すると、その値がチェックサーブレットにリダイレクトされ、ユーザーが有効な場合、サーブレットはセッション UserName を設定します。

フィルタを介してこのリクエストをインターセプトし、後でページをリダイレクトしたいのですchain.doFilterが、レスポンスがすでにコミットされているというエラー メッセージが表示されました。何が問題ですか ?

HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse res=(HttpServletResponse) response;

if(req.getRequestURI().contains("/ShowHome"))  {

  chain.doFilter(req, res);

  if(req instanceof HttpServletRequest) {

      boolean authorized=false;

      HttpSession session= req.getSession(false);

      if(session!=null) {
        if(session.getAttribute("UserName")!=null) {
          authorized=true;
        }
      } else {
        authorized=false;
      }

    if(authorized) {
      System.out.println("You are authorized user ");
      res.sendRedirect("/FilterAuth/welcome.jsp");
    } else {
      System.out.println("authentication failed ! ");

      try {
        //response.flushBuffer();

        RequestDispatcher disp= request.getRequestDispatcher("/index.jsp");
        disp.forward(request, response);
        return;
      } catch(Exception e) {
          e.printStackTrace();
      }
    }
4

1 に答える 1

0

理想的には、サーブレットが認証処理を実行する前に呼び出された場合のサーブレットフィルタ。成功したら、chain.doFilter(req、res)を介して呼び出しを渡す必要があります。

res.sendRedirect()はサーブレットフィルターで呼び出されるべきではありません。これは単に、応答がコミットされたことを示しています。

web.xmlの適切なマッピングにより、サーブレットを呼び出す前に必要なフィルターが呼び出されます。サーブレットの後半でリダイレクトが必要な場合は、それを実現できます。

于 2012-08-31T16:35:12.087 に答える