filter 可以用于对访问请求进行控制

    • 对于未登录的访问进行拦截并跳转到登录页面
    • 防盗链的设置,不是从指定页面跳转的链接一律拦截并跳转到首页

    针对未登录请求的拦截处理:
    1、放行指定页面(无需登录即可访问的页面)

    • 登录页面
    • 静态资源
    • 登录操作
    • 注册操作

    2、拦截需要登录才能访问的页面,并转发到登录页面

    1. @WebFilter(value = "/*")
    2. public class LoginFilter implements Filter {
    3. @Override
    4. public void init(FilterConfig filterConfig) throws ServletException {
    5. }
    6. @Override
    7. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    8. HttpServletRequest request = (HttpServletRequest) servletRequest;
    9. HttpServletResponse response = (HttpServletResponse) servletResponse;
    10. // 1、放行无需登录的页面
    11. String requestURI = request.getRequestURI();
    12. if (requestURI.contains("/login.jsp")){
    13. // 放行
    14. filterChain.doFilter(request, response);
    15. return;
    16. }
    17. // 2、放行静态资源
    18. if (requestURI.contains("/js") || requestURI.contains("/css")) {
    19. // 放行
    20. filterChain.doFilter(request, response);
    21. return;
    22. }
    23. // 3、登陆操作、注册操作
    24. // 4、需要登录才能访问的操作:以判断请求参数中是否带有login参数进行判断或者相关session,此处为示意
    25. String login = request.getParameter("login");
    26. if (login == null) {
    27. // 转发到登录页面
    28. request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
    29. } else {
    30. // 放行
    31. filterChain.doFilter(request, response);
    32. }
    33. }
    34. @Override
    35. public void destroy() {
    36. }
    37. }