@Override
 public void saveAccount(SamlSession account) {
   HttpSession session = request.getSession(true);
   session.setAttribute(SamlSession.class.getName(), account);
   if (idMapper != null)
     idMapper.map(
         account.getSessionIndex(), account.getPrincipal().getSamlSubject(), session.getId());
 }
  public static UserIdentity createIdentity(SamlSession samlSession) {
    Set<String> roles = samlSession.getRoles();
    if (roles == null) {
      roles = new HashSet<String>();
    }
    Subject theSubject = new Subject();
    String[] theRoles = new String[roles.size()];
    roles.toArray(theRoles);

    return new DefaultUserIdentity(theSubject, samlSession.getPrincipal(), theRoles);
  }
 @Override
 public void logoutBySsoId(List<String> ssoIds) {
   SamlSession account = getAccount();
   for (String ssoId : ssoIds) {
     if (account != null && account.getSessionIndex().equals(ssoId)) {
       logoutAccount();
     } else if (idMapper != null) {
       String sessionId = idMapper.getSessionFromSSO(ssoId);
       idMapper.removeSession(sessionId);
     }
   }
 }
 @Override
 public void logoutByPrincipal(String principal) {
   SamlSession account = getAccount();
   if (account != null && account.getPrincipal().getSamlSubject().equals(principal)) {
     logoutAccount();
   }
   if (idMapper != null) {
     Set<String> sessions = idMapper.getUserSessions(principal);
     if (sessions != null) {
       List<String> ids = new LinkedList<String>();
       ids.addAll(sessions);
       for (String id : ids) {
         idMapper.removeSession(id);
       }
     }
   }
 }