当所有请求都进行过滤拦截,你是不能登录的,你把登录的url放行,登录后能看的页面进行过滤

解决方案 »

  1.   

            //获取当前访问页面的uri
            String uri = request.getRequestURI();
    把这句改为
            String uri = request.getServletPath()试试
      

  2.   

    建议你区分开,struts2的核心控制器本身就是一个过滤器,我想你写这个过滤器的目的只是来拦截jsp页面~
    所有的请求通过拦截器去拦截,所有的页面通过过滤器去拦截,我之前写过一个小demo,参考一下:@Override
    public void doFilter(ServletRequest req, ServletResponse res,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    String path = request.getServletPath(); HttpSession session = request.getSession();
    // 如果已经登录
    if (session.getAttribute("userId") != null) {
    chain.doFilter(req, res);
    return;
    }
    // 如果是登录等地址
    if ("/login.jsp".equals(path) || "/checknum.jsp".equals(path)) {
    chain.doFilter(req, res);
    return;
    }
    // 禁用浏览器缓存
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);
    String contextPath = request.getContextPath();
    response.sendRedirect(contextPath + "/login.jsp");
    }最后提醒你一下~ 在web.xml中过滤器要配置在struts核心控制器前面~ 一般sturts的都会配置拦截所有请求~
      

  3.   

    你登录成功以后,是否正确地设置了session中的adminUser
      

  4.   

    问题得到了解决,我把String uri = request.getRequestURI();改为String uri = request.getServletPath()就好了,真心不知道为何,毕竟我的过滤器以前是没有任何问题的!  谢谢各位