filter如何对静态资源.css/.js/.jpg不进行过滤

web.xml中filter配置

 <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.cbt.Interceptor.LoginFilter</filter-class>
        <init-param>
            <param-name>loginPage</param-name>
            <param-value>main_login</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

springmvc中的配置

 <mvc:resources location="/WEB-INF/css/" mapping="/css/**" />
    <mvc:resources location="/WEB-INF/js/" mapping="/js/**" />

登录页面中引入的js跟css都被拦截了.
如果web.xml中更改filter的
/*为*.do
这样的话就只对.do结尾的请求进行拦截.自然就不会对静态资源进行过滤了

但是设置成/*就没办法对js跟CSS还有图片不进行过滤了吗?
不要说在filter代码里写.我想知道具体配置.跪求大神.
菊花献上.谢谢哒~~

最后1C币了.有木有大神呐...

把你的静态资源放在WEB-INF外面。不是过滤器的问题,你的配置没有问题。

 <mvc:resources location="/img/" mapping="/wap/img/**"/>
    <mvc:resources location="/css/" mapping="/wap/css/**"/>
    <mvc:resources location="/js/" mapping="/wap/css/**"/>

jsp中的引用


 <link rel="stylesheet" type="text/css" href="js/easyui/themes/default/easyui.css" />
<link rel="stylesheet" type="text/css" href="js/easyui/themes/icon.css" />
<link rel="stylesheet" type="text/css" href="js/easyui/demo/demo.css" />
<script type="text/javascript" src="js/easyui/jquery.min.js"></script>
<script type="text/javascript" src="js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/easyui/locale/easyui-lang-zh_CN.js"></script>

springmvc的配置

 <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/js/" mapping="/js/**" />

web.xml配置

 <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.cbt.Interceptor.LoginFilter</filter-class>
        <init-param>
            <param-name>loginPage</param-name>
            <param-value>main_login</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

filter中的代码

 String value = jedisClient.get("key1");
        //如果不是请问登录页面
        if (!"/main_login".equals(uri)) {
            //没有登录
            if (value == null) {
                httpServletResponse.sendRedirect("http://localhost:8080/" + loginPage);
                return;
            }
        }
        chain.doFilter(request, response);

css跟js还有静态资源都是跟web-inf平级的,没有放web-inf下

百思不得解

把静态资源目录结构截图来看看

目录如下:
图片说明

filter过滤掉了,uri考虑的不是很全面,需要针对静态文件路径不做拦截处理,现在的代码似乎全当做没有登录处理了,你可以查看浏览器控制台是否对每个
resource的请求,response都是登录页面,你可以查看下。

改了静态文件的目录,引用的地方的路径有没有改,还有打印下这个值String value = jedisClient.get("key1"),看下是不是不被过滤了。

是因为你的过滤器对css.js进行了过滤,在web.xml里面配过滤器的时候可以 可以在url上加上 .do 什么的。。
<!-- 登陆过滤器 -->

LoginFilter
com.gcl.energy.filter.LoginFilter


LoginFilter
.do

    过滤器实现类  只对*.do的请求过滤...   
          if (uri.indexOf("do") != -1) {
        // 是否过滤
        boolean doFilter = true;
        for (String s : notFilter) {
            if (uri.indexOf(s) != -1) {
                // 如果uri中包含不过滤的uri,则不进行过滤
                doFilter = false;

// if(uri.endsWith("gclweb/main.do")){
// doFilter = true;
// }
break;
}
}
if (doFilter) {
// 执行过滤
System.out.println("---执行过滤器----");
// 从session中获取登录者实体
Object obj = request.getSession().getAttribute("userName");
if (null == obj) {
// 如果session中不存在登录者实体,则弹出框提示重新登录
// 设置request和response的字符集,防止乱码
System.out.println("session不存在");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

                response.sendRedirect("/energy-smart/gclweb/login.do");
            } else {
                System.out.println("session存在");
                // 如果session中存在登录者实体,则继续
                filterChain.doFilter(request, response);
            }
        } else {
            // 如果不执行过滤,则继续
            System.out.println("不执行过滤");
            filterChain.doFilter(request, response);
        }
    } else {
        // 如果uri中不包含do,则继续
        System.out.println("不执行过滤");
        filterChain.doFilter(request, response);
    }

如果确定URI是不包含后缀,则可以在过滤器里加一句代码将静态资源请求不过滤:
if(request.getRequestURI().indexOf(".") > 0) return;