在做了全局过滤后,使用Edge浏览器测试功能时,突然发现注册页面的CSS效果失效,返回登录页面发现CSS正常,所以一直以为是注册页面的CSS路径有错,改了半天也没效果,清除浏览器缓存也不行,使用谷歌测试,发现所有页面的CSS效果都失效了,百度了一下终于知道原因,全局过滤把所有Js,css文件都过滤了,包括图片也被过滤掉,于是改了全局过滤的代码,放行了CSS,JS以及图片
以下为更改后的全局过滤代码,因为用的servlet3.0,所以使用@WebFilter("/*")即可,无需配置web.xml
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*")
public class loginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
/***
* 全局过滤
* ***/
HttpServletRequest req = (HttpServletRequest)servletRequest;
HttpServletResponse resp =(HttpServletResponse) servletResponse;
HttpSession session = req.getSession();
// 获得用户请求的URI
String path = req.getRequestURI();
// 从session取得已经登录验证的凭证 这里用的password
String password = (String) session.getAttribute("password");
//登录,注册页面无需过滤 也可以使用path.contains("login.jsp")
if(path.indexOf("/login.jsp") > -1||path.indexOf("/index.jsp") > -1 ||path.indexOf("/register.jsp") > -1||path.indexOf("/checkLogin") > -1||path.indexOf("/registerServlet") > -1) {//注意:登录注册页面千万不能过滤
filterChain.doFilter(req, resp);
return ;
}else if(path.contains(".css") || path.contains(".js") || path.contains("images")){ //防止css,js,images被过滤 也可以用path.endWith(".js")
filterChain.doFilter(req, resp);
}
else {//其他情况进行过滤
if (password == null || "".equals(password)) {
// 跳转到登陆页面
resp.sendRedirect("login.jsp");
} else {
// 已经登陆,继续此次请求
filterChain.doFilter(req, resp);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
版权声明:本文为qq_42282789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。