filter 可以用于对访问请求进行控制
- 对于未登录的访问进行拦截并跳转到登录页面
- 防盗链的设置,不是从指定页面跳转的链接一律拦截并跳转到首页
针对未登录请求的拦截处理:
1、放行指定页面(无需登录即可访问的页面)
- 登录页面
- 静态资源
- 登录操作
- 注册操作
2、拦截需要登录才能访问的页面,并转发到登录页面
@WebFilter(value = "/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 1、放行无需登录的页面
String requestURI = request.getRequestURI();
if (requestURI.contains("/login.jsp")){
// 放行
filterChain.doFilter(request, response);
return;
}
// 2、放行静态资源
if (requestURI.contains("/js") || requestURI.contains("/css")) {
// 放行
filterChain.doFilter(request, response);
return;
}
// 3、登陆操作、注册操作
// 4、需要登录才能访问的操作:以判断请求参数中是否带有login参数进行判断或者相关session,此处为示意
String login = request.getParameter("login");
if (login == null) {
// 转发到登录页面
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
} else {
// 放行
filterChain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}