package www.stx.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* 过滤器
**/
@WebFilter("/*") //所有的请求都会被拦截
public class LoginFilter implements Filter {
//集合中放需要放行的路径
List<String> list;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
list = new ArrayList<String>();
list.add("/login.jsp");
list.add("/Register.jsp");
list.add("/login.do");
list.add(".css");
list.add(".js");
list.add(".jpg");
}
//如果登录了 正常通行
//如果没登陆 让你回到登录页面
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//有一些页面需要放行 【login.jsp】
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
//拿的是当前项目之后的路径
// String path = req.getServletPath();
String path = req.getRequestURL().toString();
//判断访问路径是否在集合中
boolean f = false;
for (String p : list) {
if (path.endsWith(p)) {
f = true;
break;
}
}
if (f) {
chain.doFilter(request, response);//放行
return;
}
//判断你是否可以通行【有没有登录:session中是否有user属性】
Object user = req.getSession().getAttribute("user");
if (user == null) {
resp.sendRedirect("login.jsp");
return;
} else {
chain.doFilter(request, response);//放行
}
}
@Override
public void destroy() {
}
}
我们在集合当中存放我们允许它通过的页面。