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

com.kedauis.inteceptor.AuthInterceptor Maven / Gradle / Ivy

package com.kedauis.inteceptor;

import com.google.gson.Gson;
import com.kedauis.system.model.SysUser;
import com.kedauis.system.web.controller.common.BaseController;
import com.kedauis.util.StaticEnum;
import com.kedauis.util.ConfigUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

/**
 * 项目名称:kd-uip
 * 类描述:权限认证拦截器
 * 创建人:QiuYu
 * 创建时间:2017/12/7 17:45
 * 修改人:
 * 修改时间:
 * 修改备注:
 */
@Component
public class AuthInterceptor implements HandlerInterceptor{

    private static final Logger logger = LoggerFactory.getLogger(AuthInterceptor.class);

    @Autowired
    private ConfigUtil configUtil;

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        // 在请求处理之前进行调用(Controller方法调用之前)
        SysUser loginUser = (SysUser) httpServletRequest.getSession().getAttribute(StaticEnum.LOGIN_USER);
        String callUrl = httpServletRequest.getRequestURL().toString();
        String sessionId = httpServletRequest.getSession().getId();
        if(null != loginUser && StringUtils.isNotBlank(loginUser.getUserName())){
            try {
                // 获取全部Parameter参数
                Map allParams = httpServletRequest.getParameterMap();
                Map qryParams = new HashMap();
                for(Map.Entry entry : allParams.entrySet()){
                    // 参数名称长度超过20则默认为系统参数不打印
                    if(entry.getKey().length()<20){
                        qryParams.put(entry.getKey(), entry.getValue());
                    }
                }
                // 获取全部Attribute参数
                Enumeration attrs = httpServletRequest.getAttributeNames();
                while (attrs.hasMoreElements()){
                    String attrName = attrs.nextElement();
                    if(attrName.length()<20){
                        // 参数名称长度超过20则默认为系统参数不打印
                        qryParams.put(attrName, new String[]{httpServletRequest.getAttribute(attrName).toString()});
                    }
                }

                String parameters = new Gson().toJson(qryParams);

                logger.info(
                        "LOGIN_USER: " + loginUser.getUserName() + " " +
                        "CALL URL: " + callUrl + " " +
                        "PARAMETERS: " + parameters + " " +
                        "SESSION_ID: " + sessionId
                );

            } catch (Exception e) {
                logger.info(
                        "LOGIN_USER: " + loginUser.getUserName() + " " +
                        "CALL URL: " + callUrl + " " +
                        " PARAMETERS: Parameter Convert Failed: " + e.getMessage() + " " +
                        " SESSION_ID: " + sessionId
                );
            }
            logger.info("USER_ID:" + loginUser.getUserId() + " SESSION_ID: " + sessionId + " CALL: " + callUrl + " BEGIN!");
            // 存在登陆用户信息则允许继续访问
            return true;
        }else{
            // 默认不存在当期登陆用户,重定向未登录处理
            logger.info("用户尚未登陆或者登陆信息已失效,禁止访问!!" + " SESSION_ID: " + httpServletRequest.getSession().getId());
            httpServletRequest.getRequestDispatcher("/auth/failed").forward(httpServletRequest, httpServletResponse);
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        // 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
        String callUrl = httpServletRequest.getRequestURL().toString();
        String sessionId = httpServletRequest.getSession().getId();
        SysUser loginUser = (SysUser) httpServletRequest.getSession().getAttribute(StaticEnum.LOGIN_USER);
        logger.info("USER_ID:" + loginUser.getUserId() + " SESSION_ID: " + sessionId + " CALL: " + callUrl + " FINISH!");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        // 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy