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专家,但只是查看您的代码我只想说两件事

(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 回答