Кабельный превед
Оператор кабельного ТВ балуется. Снято на телефон.

Модуль аутентификации к Jetty
Для написания своего Login Module документация по JAAS в Jetty отправляет к соответствующим исходникам и намекает, что нужно всего лишь накодировать метод getUserInfo. Это чистая правда, но пока врубишься что к чему, Jetty наплюет не один килобайт логов с ошибками. Итак, что получилось:
package levi.ainv;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.mortbay.jetty.plus.jaas.spi.AbstractLoginModule;
import org.mortbay.jetty.plus.jaas.spi.UserInfo;
import org.mortbay.jetty.security.Credential;
public class DBLoginModule extends AbstractLoginModule {
@Override
public UserInfo getUserInfo(String userName) throws Exception {
// в моем случае используется Singleton-объект Engine,
// который хранит хэшмап с юзерами
User user = Engine.itself().selectUser(userName);
// на нет и суда нет
if(user == null) {
return null;
}
// заливаем роли в список
List<String> roles = new ArrayList<String>();
Iterator<Role> userRoles = user.getRoles().iterator();
while(userRoles.hasNext()) {
roles.add(userRoles.next().getName());
}
// ключевой момент - возвращаем имя юзера,
// креденшл, изготовленный из простого строкового пароля, и список с ролями --
// дальше родительский класс сам сравнит пароли и роли,
// которые мы предоставили для заданного имени юзера и решит
// пущать или не пущать
return new UserInfo(userName, Credential.getCredential(user.getPassword()), roles);
}
}
То есть, нужно из своего супер-секретного-хранилища юзерских аккаунтов, где бы оно ни было, вытащить аккаунт с заданным именем, запаковать в объект UserInfo и return его. Больше ни о чем думать не требуется.
Кўсо живо
Поисковик по Unicode-символам убедительно доказал, что „устаревший“ иероглиф для японского слова «kŭso» (в перев. на англ. «shit») живее всех живых. Вуаля:
糞
Вполне потребно им ругаться. К примеру:
— 糞! Опять netsplit!
Groovy
Еще один язык в очереди на изучение. Скриптовая java — это страшная сила.