0

この Java Web アプリケーションは、無限ループのように実行されます。誰か私に理由を教えてもらえますか?ここですべてのリクエストをフィルタリングする必要があります。許可されている人はシステムを使用できます。他のユーザーは、メッセージでログインページに移動する必要があります..これを行うのを手伝ってください.

FilterRequest.java

package com.mobitel.bankdemo.web;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mobitel.bankdemo.domain.User;

public class FilterRequest implements Filter{
    FilterConfig filterConfig = null;

    public FilterRequest() {
        super();
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        System.out.println("Inside the filter.............."  );
          HttpSession session = request.getSession(true);
          User u = null;
          if(session.getAttribute("loggedUser")!=null){
              u = (User) session.getAttribute("loggedUser");
          }       
          if (u!= null)
          {
              System.out.println("user does exits.." + u.getUname() );
              chain.doFilter(req, resp);

          }else{
              String message = "Please Login!";             
              req.setAttribute("loginMsg", message);
              response.sendRedirect("login2.jsp");
          }
    }
    public void destroy() {
        // do cleanup stuff
    }
}

web.xml フィルター マッピング

<filter>
        <filter-name>FilterRequest</filter-name>
        <filter-class>com.mobitel.bankdemo.web.FilterRequest</filter-class>                 
  </filter>
  <filter-mapping>
        <filter-name>FilterRequest</filter-name>
        <url-pattern>*.jsp</url-pattern>
  </filter-mapping> 

前もって感謝します

4

2 に答える 2

0

私はJavaの専門家ではありませんが、あなたのコードを見ているだけです.2つのことを言いたいだけです.

(1)フィルターがリクエストからユーザー名を取得するかどうかを検討してください

if(session.getAttribute("loggedUser")!=null){
              u = (User) session.getAttribute("loggedUser");
          }       
          if (u!= null)
          {
              System.out.println("user does exits.." + u.getUname() );
              chain.doFilter(req, resp);

他のものをフィルタリングするためにサブルーチンまたはメソッドに再び移動しますが、このメソッドに入った後、実行しているuser=nullため、以前に整理した場合は再び同じに入ります

これは

                if (u!= null)
              {
                  System.out.println("user does exits.." + u.getUname() );
                  chain.doFilter(req, resp);

そのため、メソッドの外側で User u=null を定義してください。それはあなたの問題を解決するかもしれません

于 2013-07-10T10:47:50.310 に答える
0
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
            System.out.println("Inside the filter.............."  );
    String loginUrl= request.getContextPath() + "/login2.jsp";//url for login page
        String uri = request.getRequestURI().toString();
        if (uri.endsWith(loginUrl)){// if uri is login page then no need to check if login, just process the chain
            chain.doFilter();
        } 
           else{   HttpSession session = request.getSession(true);
              User u = null;
              if(session.getAttribute("loggedUser")!=null){
                  u = (User) session.getAttribute("loggedUser");
              }       
              if (u!= null)
              {
                  System.out.println("user does exits.." + u.getUname() );
                  chain.doFilter(req, resp);

              }else{
                  String message = "Please Login!";             
                  req.setAttribute("loginMsg", message);
                  response.sendRedirect("login2.jsp");
                  return;
              }
    }
        }
于 2013-07-10T10:52:39.513 に答える