cas4.2.7添加登录日志,基于拦截器

拦截器代码

public class LogInterceptor extends HandlerInterceptorAdapter {

    private final static String DELETE_FLAG = "0";

    private final static String SYSTEM= "CAS";

    private final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 登录操作日志记录
     * @param request
     * @param response
     * @param handler
     * @param ex
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){

        //判断是否为登录操作
        if(request.getMethod().toLowerCase().equals("post")&&request.getRequestURI().toLowerCase().contains("login")){
            CsUserLogin csUserLogin = new CsUserLogin();

            getInfo(csUserLogin,request,response,ex);

            saveLog(csUserLogin);
        }
    }

    /**
     * 填充用户登录日志内容
     * @param csUserLogin
     * @param request
     * @param response
     */
    public void getInfo(CsUserLogin csUserLogin,HttpServletRequest request, HttpServletResponse response,Exception ex){
        csUserLogin.setId(UUID.randomUUID().toString().replaceAll("-",""));
        //登录名
        String loginName = (request.getParameterMap().get("username")[0]);
        csUserLogin.setLoginName(loginName);
        //系统和浏览器信息
        String userAgent = request.getHeader("user-agent");
        String os = getOS(userAgent);
        csUserLogin.setOperatingSystem(os);
        csUserLogin.setBrowser(userAgent);
        //登录时间
        csUserLogin.setLoginTime(new Date());
        //登录路径和方法
        csUserLogin.setMethod(request.getMethod());
        csUserLogin.setRequestUri(request.getRequestURI());
        //ip
        csUserLogin.setIpAddress(getRemoteAddr(request));
        //异常信息
        if(ex!=null){
            csUserLogin.setErrorInfo(ex.getMessage());
        }
        //册除状态 1删除,0未删除:默认"0"
        csUserLogin.setDelFlag(DELETE_FLAG);

    }

    /**
     * 存储登录日志
     * @param csUserLogin
     */
    public void saveLog(CsUserLogin csUserLogin){
        DataSource dataSource = ApplicationContextProvider
                .getApplicationContext().getBean("dataSource",
                        DataSource.class);
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        StringBuffer sb = new StringBuffer("");
        System.out.println(sb.toString());
        jdbcTemplate.update(sb.toString());
    }

    /**
     * 获得用户远程地址
     */
    public static String getRemoteAddr(HttpServletRequest request){
        String remoteAddr = request.getHeader("X-Real-IP");
        if (!StringUtils.isEmpty(remoteAddr)) {
            remoteAddr = request.getHeader("X-Forwarded-For");
        }else if (!StringUtils.isEmpty(remoteAddr)) {
            remoteAddr = request.getHeader("Proxy-Client-IP");
        }else if (!StringUtils.isEmpty(remoteAddr)) {
            remoteAddr = request.getHeader("WL-Proxy-Client-IP");
        }
        return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
    }

    /**
     * 获取参数
     * @param params
     * @return
     */
    public static String getParams(Map<String, String[]> params){
        Map map = params;
        Set keSet=map.entrySet();
        StringBuffer sb = new StringBuffer();
        for(Iterator itr = keSet.iterator(); itr.hasNext();){
            Map.Entry me=(Map.Entry)itr.next();
            Object ok=me.getKey();
            Object ov=me.getValue();
            String[] value=new String[1];
            if(ov instanceof String[]){
                value=(String[])ov;
            }else{
                value[0]=ov.toString();
            }

            for(int k=0;k<value.length;k++){
                if(k==0){
                    sb.append("&").append(ok+"="+value[k]);
                }else{
                    sb.append(","+value[k]);
                }
                //System.out.println(ok+"="+value[k]);
            }
        }
        if(sb.length()==0){
            return null;
        }else{
            return sb.deleteCharAt(0).toString();
        }
    }

    private String getOS(String userAgent){
        String os = new String();
        //=================OS Info=======================
        if (userAgent.toLowerCase().contains("windows") )
        {
            os = "Windows";
        } else if(userAgent.toLowerCase().contains("mac"))
        {
            os = "Mac";
        } else if(userAgent.toLowerCase().contains("x11"))
        {
            os = "Unix";
        } else if(userAgent.toLowerCase().contains("android"))
        {
            os = "Android";
        } else if(userAgent.toLowerCase().contains("iphone"))
        {
            os = "IPhone";
        }else{
            os = "UnKnown, More-Info: "+userAgent;
        }
        return os;
    }
}

拦截器配置

  • cas-servlet.xml中添加如下配置
<!-- 拦截器配置,拦截顺序:先执行后定义的,排在第一位的最后执行。 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/login" />
            <bean class="org.jasig.cas.web.interceptor.LogInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,646评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,342评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,232评论 6 342
  • 【环境说明】: 本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows...
    yljava阅读 9,506评论 3 8
  • 清晨,沿径而行 小心翼翼避开的蛛网 在黄昏,已消失无痕 一丛草 ,在工地外依墙而立 默默地开花,结籽 等时间的手拂...
    夏木泽阅读 326评论 0 4

友情链接更多精彩内容