All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bilibili.yl.filter.LoginFilter Maven / Gradle / Ivy

package com.bilibili.yl.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 登录过滤器,验证用户是否登录
 * */
public class LoginFilter implements Filter {
    private String sessionName = "";
    private String url = "";
    private String filter = "";

    @Override
    public void init(FilterConfig filterConfig) {
        this.sessionName = filterConfig.getInitParameter("sessionName") == null ? "user" : filterConfig.getInitParameter("sessionName");
        this.url = filterConfig.getInitParameter("url") == null ? "login" : filterConfig.getInitParameter("url");
        this.filter = filterConfig.getInitParameter("filter") == null ? "" : filterConfig.getInitParameter("filter");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        //过滤的uri
        String[] filters = filter.split(",");
        //请求的uri
        String uri = request.getRequestURI();
        //获取项目根路径
        String path = request.getContextPath() + "/";
        //是否过滤
        boolean doFilter = false;
        for (String s : filters) {
            if (!s.equals("")) {
                if (uri.contains(s)) {
                    //如果uri中包含过滤的uri则进行过滤;
                    doFilter = true;
                    break;
                }
            }
        }
        //不过滤主页
        if (uri.equals(path)) doFilter = false;
        //执行过滤
        if (doFilter) {
            //从session获取登录体实体
            if (request.getSession().getAttribute(sessionName) == null) {
                boolean isAjaxRequest = isAjaxRequest(request);
                if (isAjaxRequest) {
                    response.setCharacterEncoding("UTF-8");
                    PrintWriter out = response.getWriter();
                    out.println("{\"code\":500,\"msg\":\"你已经太长时间没有操作,请刷新页面\"}");
                    out.close();
                } else response.sendRedirect(path + url);
            } else filterChain.doFilter(request, response);
        } else filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }

    /**
     * 判断是否为Ajax请求
     *
     * @return 是true, 否false
     */
    private static boolean isAjaxRequest(HttpServletRequest request) {
        String header = request.getHeader("X-Requested-With");
        return "XMLHttpRequest".equals(header);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy