class SystemAccountAuthenticator implements PasswordAuthenticator {

    public void authenticate(final String userId, final String password)
        throws AuthenticationFailedException, UserIdLockedException, PasswordExpiredException {

        if (userId == null || password == null) {
            throw new AuthenticationFailedException(userId);
        }

        // 有効期限は日付単位で管理しているので、現在日時から時間を切り捨てた日付を使用する。
        Date sysDate = new Timestamp(DateUtil.getDate(SystemTimeUtil.getDateString()).getTime());
        final SystemAccount account;
        try {
            account = UniversalDao.findBySqlFile(
                    SystemAccount.class,
                    "FIND_SYSTEM_ACCOUNT", new Object[]{userId, sysDate});
        } catch (NoDataException e) {
            // ユーザIDに一致するユーザーが見つからない場合
            throw new AuthenticationFailedException(userId);
        }

        authenticate(account, password, sysDate);
    }

    public  SystemAccountAuthenticator();

}