package com.bjsxt.web.filter;

import com.bjsxt.pojo.Users;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 判断用户是否登录的过滤器
 */
public class UserLoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

           // 将父类ServletRequest强转为HttpServletRequest
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        // 获取用户访问的uri
        String uri = request.getRequestURI();
         /*用户完成的登录的uri必须放行：userLogin、login.jsp。否则用户无法登录 */
        // 判断当前访问的URI是否是用户登录的资源，如果是则放行
        if (uri.indexOf("login") != -1 || uri.indexOf("userLogin") != -1){
            // 放行
            filterChain.doFilter(servletRequest, servletResponse);
        }else { // 不是用户登录资源，就要判断用户是否登录过，没有登陆过则返回登录页面，登录过则允许访问
             /*判断用户是否登录过 */
            // 获取HttpSession对象
            HttpSession session = request.getSession();
            // 如果登录过session中会存放登录时返回的Users对象，所以通过session对象获取Users，再判断Users是否存在
            Users user = (Users) session.getAttribute("user");
            // 判断Users对象是否存在，存在就说明登录过
            if (user != null && user.getUsername().length()>0){ // 登录过，放行
                // 放行
                filterChain.doFilter(servletRequest, servletResponse);
            }else { // 没登录过。跳转到登录页面，并传递一个信息
                // 存放需要传递的信息
                request.setAttribute("msg","请登录！！！");
                // 重定向
                request.getRequestDispatcher("/login").forward(servletRequest, servletResponse);
            }
        }

    }


    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}
