过滤器内容
************************************************************************************
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
//验证用户是否登录
Cookie[] cookies = request.getCookies();
String sysUser = null;
if(cookies != null){
  for(int i = 0; i<cookies.length; i++){
Cookie c = cookies[i];
if(c.getName().equalsIgnoreCase("sysUser")){
sysUser = c.getValue();
}
  }
}
if(null == sysUser){
response.sendRedirect("/web/web/account/login.jsp");
}

arg2.doFilter(arg0, arg1);
}
**************************************************************************************
web.xml
  <filter>
    <filter-name>ValidateFilter</filter-name>
    <filter-class>net.filter.ValidateFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>ValidateFilter</filter-name>
    <url-pattern>/web/user/*</url-pattern>
  </filter-mapping>
*********************************************************************************在未登录的情况下我在地址栏输入 
hhttp://127.0.0.1:8080/web/web/user/index.jsp
会正常过滤,跳转到登录页面
可当我输入
http://127.0.0.1:8080/web/user.do?method=doIndex
却不能正常的过滤跳转到登录页面
同样是跳转到user文件下的index.jsp页面为什么第一个可以实现过滤而第二个不行
是不是因为过滤是针对地址栏的网址来实现过滤。ssh过滤器

解决方案 »

  1.   

    /web/user/* 这个如何拦截/web/user.do?method=doIndex 格式都不一样
      

  2.   

    /web/user/*  只会拦截user下面所有的请求
      

  3.   

    我是用SSH框架开发的系统
    http://127.0.0.1:8080/web/user.do?method=doIndex
    所以要用以上的方式来进入打开页面,同样是跳转到user/index.jsp<forward name="index" path="/web/user/index.jsp"></forward>
      

  4.   

    你的项目名该不会是叫“web”吧
      

  5.   

    项目名是叫web 这个项目名有关?
      

  6.   

    我是用SSH框架开发的系统
    http://127.0.0.1:8080/web/user.do?method=doIndex
    所以要用以上的方式来进入打开页面,同样是跳转到user/index.jsp<forward name="index" path="/web/user/index.jsp"></forward>

    没明白你意思啊 ,这个跟跳转方式无关啊,都会被filter拦截的。。你配置的是/web/user/*
    请求路径中满足 /web/user/* 才会验证是否登录
    http://127.0.0.1:8080/web/web/user/index.jsp      
    http://127.0.0.1:8080/web/user.do?method=doIndex
    显然第二种不满足 ,要想满足,,
    更改struts下的namespace, 
    或者
      <filter-mapping>
        <filter-name>ValidateFilter</filter-name>
        <url-pattern>/web/user/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>ValidateFilter</filter-name>
        <url-pattern>/user.do</url-pattern>
      </filter-mapping>
     或者 
    除了登录页面意外干脆配置/* 拦截所有请求
      

  7.   

    我是用SSH框架开发的系统
    http://127.0.0.1:8080/web/user.do?method=doIndex
    所以要用以上的方式来进入打开页面,同样是跳转到user/index.jsp<forward name="index" path="/web/user/index.jsp"></forward>

    没明白你意思啊 ,这个跟跳转方式无关啊,都会被filter拦截的。。你配置的是/web/user/*
    请求路径中满足 /web/user/* 才会验证是否登录
    http://127.0.0.1:8080/web/web/user/index.jsp      
    http://127.0.0.1:8080/web/user.do?method=doIndex
    显然第二种不满足 ,要想满足,,
    更改struts下的namespace, 
    或者
      <filter-mapping>
        <filter-name>ValidateFilter</filter-name>
        <url-pattern>/web/user/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>ValidateFilter</filter-name>
        <url-pattern>/user.do</url-pattern>
      </filter-mapping>
     或者 
    除了登录页面意外干脆配置/* 拦截所有请求怎么更改struts下的namespace。
      

  8.   

    如果地址是: http://127.0.0.1:8080/web/user.do?method=doIndex  要怎么过滤
      

  9.   

    项目名是叫web 这个项目名有关?当然有关系了,由于你struts的配置是<url-pattern>/web/user/*</url-pattern>,是要过滤“/web/user/”这些开头的请求,又由于你的项目名是“web”,所以整一个过滤的路径是“http://127.0.0.1:8080/web/web/user/”这个下面的请求
      

  10.   


    配置成“<url-pattern>/user/*</url-pattern>”这样就可以了
      

  11.   

    配置成“<url-pattern>/*</url-pattern>”这样 然后在过滤器里面判断是否有包含/user这个的请求即可