public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws IOException, ServletException
{

// Session属于HTTP范畴,所以ServletRequest对象需要先转换成HttpServletRequest对象
HttpServletRequest req = (HttpServletRequest) request; 
HttpSession session = req.getSession(true) ;
String username = (String) session.getAttribute("adminusname");  // 如果session不为空,则可以浏览其他页面
if((username == null || "".equals(username)) && !req.getRequestURI().endsWith("/jsp/login.jsp"))
{

// 通过requestDispatcher跳转到登陆页

request.getRequestDispatcher("//jsp/login.jsp").forward(request,response) ;
}
else
{
chain.doFilter(request,response) ;

}当我直接输入 /jsp/目录的时候,程序会自动跳转到/jsp/login.jsp ,当我已经在功登录后,它就不跳转了,我输入/jsp/  这个地址,它就找不到页面了,因为这个时候他是已登录状态,所以程 序监听器,判断不用跳转到/jsp/login.jsp 这个页面
   请问这个问题要怎么解决呀

解决方案 »

  1.   

    虽然没有怎么看懂楼主的问题 但是我想大胆猜测了一下你的if else写反了,第一个条件username == null是肯定成立的,因为你没有登录,!req.getRequestURI().endsWith("/jsp/login.jsp")这个方法我虽然没有用过,我猜测是不是URL以"/jsp/login.jsp"结尾的字符串?如果这样当你没有输入.jsp的时候这个条件就成立,所以你输入/jsp/后面没有.jsp的时候就跳转了,而输入的时候就没有
      

  2.   

    如果没有登录,你输入/jsp/,下面逻辑判断为true
    (username == null || "".equals(username)) && !req.getRequestURI().endsWith("/jsp/login.jsp")如果登录了,判断为false,所以直接进入else楼主你想要的应当是这样的判断吧
    (username == null || "".equals(username)) && req.getRequestURI().endsWith("/jsp/login.jsp")
    你多加了一个!
      

  3.   

    如果楼主想将所有/jsp/的请求都转到login页面,也可以这样写
    (username == null || "".equals(username)) || !req.getRequestURI().startsWith("/jsp/")
      

  4.   

    楼主是想用户必须登录后才能访问其他页面吧,那么楼主可以在登录的action中将用户名保存到session中,在页面中加入jsp标签的if-else判断session是否为空,为空跳转到登录页面,不为空则显示本页面。
      

  5.   

    这个是监听器里的,如果判断session为真就会直接 chain.doFilter(request,response) ; 这个不做跳转了但是现在的请求是  /jsp/没有实际的请求,它就会出错,因为这个目录请求,监听器,是判断了允许的!