private void loginUser(Authentication authentication) {
    if (authentication == null) return;

    if (!(authentication.getPrincipal() instanceof Person)) return;

    Person person = (Person) authentication.getPrincipal();
    String username = person.getUsername();
    String name = person.getName();

    if (authentication.getDetails() instanceof WebAuthenticationDetails) {
      WebAuthenticationDetails details = (WebAuthenticationDetails) authentication.getDetails();

      String ip = details.getRemoteAddress();
      String sessionId = details.getSessionId();

      if (onLineManager.getOnlineUser(sessionId) != null) return;

      onLineManager.loginUser(ip, sessionId, person);

      logManager.log(username, name, ip, "登录系统", "");

      if (logger.isDebugEnabled())
        logger.debug(
            "用户 {}[{}] 登录系统,登录IP:{},session:{}", new Object[] {name, username, ip, sessionId});
    }
  }
  private void logoutUser(String sessionId) {
    OnLineInfo onlineInfo = onLineManager.getOnlineUser(sessionId);
    if (onlineInfo == null) return;

    String ip = onlineInfo.getIp();
    Person person = onlineInfo.getPerson();
    String username = person.getUsername();
    String name = person.getName();

    onLineManager.logoutUser(sessionId);

    logManager.log(username, name, ip, "退出登陆", "");

    if (logger.isDebugEnabled())
      logger.debug(
          "用户 {}[{}] 退出登陆,登录IP:{},session:{}", new Object[] {name, username, ip, sessionId});
  }
  public void onApplicationEvent(ApplicationEvent e) {
    if (e instanceof AuthenticationSuccessEvent) {
      // 登录成功后的事件处理
      AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) e;
      Authentication authentication = event.getAuthentication();

      loginUser(authentication);
    } else if (e instanceof HttpSessionCreatedEvent) {
      HttpSession session = ((HttpSessionCreatedEvent) e).getSession();

      OnLineInfo onlineInfo = onLineManager.getOnlineUser(session.getId());
      if (onlineInfo == null) return;

      Person person = onlineInfo.getPerson();
      String username = person.getUsername();
      //
      //			//把当前登录用户的CSS主题写入Session中
      //			String cssTheme = settingManager.getPersonSettingValue(username, MyConstants.CSS_THEME);
      //			if (cssTheme == null)
      //				cssTheme = "";
      //
      //			session.setAttribute(MyConstants.CSS_THEME, cssTheme);
      //
      //			//把当前登录用户的在线消息定时接收时间间隔写入Session中
      //			int messageCheckInterval = settingManager.getPersonSettingIntValue(username,
      // MyConstants.MESSAGE_CHECK_INTERVAL);
      //			session.setAttribute(MyConstants.MESSAGE_CHECK_INTERVAL, messageCheckInterval);
      //
      //			//把当前登录用户的电子邮件定时接收时间间隔写入Session中
      //			int mailCheckInterval = settingManager.getPersonSettingIntValue(username,
      // MyConstants.MAIL_CHECK_INTERVAL);
      //			session.setAttribute(MyConstants.MAIL_CHECK_INTERVAL, mailCheckInterval);
    } else if (e instanceof HttpSessionDestroyedEvent) {
      SecurityContext securityContext = ((HttpSessionDestroyedEvent) e).getSecurityContext();
      if (securityContext == null) return;

      Authentication authentication = securityContext.getAuthentication();
      if (authentication == null) return;

      if (authentication.getDetails() instanceof WebAuthenticationDetails) {
        WebAuthenticationDetails details = (WebAuthenticationDetails) authentication.getDetails();
        String sessionId = details.getSessionId();

        logoutUser(sessionId);
      }
    }
  }