写了一个过滤器,就是为了防止未登录但知道网址,从而直接访问相应页面的问题。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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class FilterAccess implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {}    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)throws IOException, ServletException {
     HttpServletRequest  hreq = (HttpServletRequest)request;
     HttpServletResponse hres = (HttpServletResponse)response;
    
     HttpSession session = ((HttpServletRequest)hreq).getSession();
     String username = (String)session.getAttribute("username");
    
     if(username == null) {
                //首页网址
     hres.sendRedirect("http://localhost:8080" + hreq.getContextPath() + "/index.jsp");
     } else {
     chain.doFilter(request, response);
     }
    }    public void destroy() {}
}下面是web.xml中的配置信息。  <filter>
   <filter-name>accessControl</filter-name>
   <filter-class>cn.edu.sjzri.filterEncoding.FilterAccess</filter-class>
  </filter>  <filter-mapping>
   <filter-name>accessControl</filter-name>
   <url-pattern>/admin/*</url-pattern>
  </filter-mapping>就是为了保证在访问admin下文件(都是jsp)时,用户是登陆的。但是现在出现了一个问题:首页无法访问了,即http://localhost:8080/title,它指向的页面是在WebRoot下的index.jsp。访问首页是Firefox显示“此页面重定向不正确。Firefox 检测到该服务器正在将此地址的请求循环重定向。”我觉得是过滤器发现HttpSession中的username是空的,从而重定向到了首页,从而发生了循环。但是我在web.xml中配置的是/admin/*下的页面才要用到过滤器,而首页不在admin文件夹下,为什么也经过过滤器了呢?

解决方案 »

  1.   

    我看了你的代码 你的配置  没有问题!你的 index.jsp 文件中是有其他的操作呀?
      

  2.   

    恩,东西挺多的。下的一个模板,里面都是一些css+div、js、还有一些jQuery乱七八糟的东西。自己加的东西就是几个不同角色登录的链接。难道是那些乱七八糟的东西惹的祸?
      

  3.   

    我直接用的别的地址也无法正常显示,例如http://localhost:8080/title/user/login.jsp或是http://localhost:8080/title/index1.jsp,提示仍是一样的。url-pattern失效了?
      

  4.   

    你顶楼的Filter配置没有错。
    如果依然表现异常,不妨清空Tomcat work目录,重启动Tomcat看看。
      

  5.   

    其他应用这样吗?(排除Tomcat问题)web.xml全文贴出来看看。
      

  6.   

    你这个只能拦截  /amind  下面的操作。只能算是半吊子的
      

  7.   


    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    >
        
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
      <filter>
       <filter-name>setEncoding</filter-name>        
       <filter-class>cn.edu.sjzri.filterEncoding.FilterEncoding</filter-class>
       <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
       </init-param>
      
       <filter-name>accessControl</filter-name>
            <!--cn.edu.sjzri.filterEncoding包名不太规范-->
       <filter-class>cn.edu.sjzri.filterEncoding.FilterAccess</filter-class>
      </filter>
      
      <filter-mapping>
       <filter-name>setEncoding</filter-name>
       <url-pattern>/*</url-pattern>
      
       <filter-name>accessControl</filter-name>
       <url-pattern>/admin/*</url-pattern>
      </filter-mapping>
      
      <!-- Standard Action Servlet Configuration -->
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
     </servlet>
      <!-- Standard Action Servlet Mapping -->
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    </web-app>目前只有这一个应用
      

  8.   

    应该是
      <filter>
          <filter-name>setEncoding</filter-name>        
          <filter-class>cn.edu.sjzri.filterEncoding.FilterEncoding</filter-class>
          <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
       </filter>
      <filter>
     
       
          <filter-name>accessControl</filter-name>
            <!--cn.edu.sjzri.filterEncoding包名不太规范-->
          <filter-class>cn.edu.sjzri.filterEncoding.FilterAccess</filter-class>
      </filter>
      
      <filter-mapping>
          <filter-name>setEncoding</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
          <filter-name>accessControl</filter-name>
          <url-pattern>/admin/*</url-pattern>
      </filter-mapping>
      

  9.   

    问题出在配置文件中,每一个过滤器要单独配置,即一个<filter></filter>对应一个<filter-mapping></filter-mapping>,不要在一个<filter></filter>以及<filter-mapping></filter-mapping>中同时配置多个适配器,具体见11楼。