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;