Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSF+Active directory 
:(
    Опции темы
Vofka
Дата 6.9.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 21.6.2006

Репутация: 1
Всего: 1



Как сделать чтобы аутентификация пользователя jsf приложения происходила с помощью active directory?
PM MAIL   Вверх
batigoal
Дата 6.9.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Не особо разбираюсь в сабже, но ведь к AD можно обратиться через LDAP, работа с которым в Java  поддерживается.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Vofka
Дата 6.9.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 21.6.2006

Репутация: 1
Всего: 1



А пример какой нибудь простенький можно?или сылочку где почитать можно?
PM MAIL   Вверх
batigoal
Дата 6.9.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Личным примером не помогу. Посмотри статьи с гугла: http://www.google.com/search?hl=en&q=j...ctory&meta=

Это сообщение отредактировал(а) batigoal - 6.9.2007, 15:45


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
vzf
Дата 7.9.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: 2
Всего: 5



Если используется Tomcat, то там можно настроить соответствующий Realm, который будет использовать указанный LDAP сервер для аутентификации пользователей и разграничения доступа. В доках томката об этом написано (если не ошибаюсь в разделе про realms)

Добавлено через 5 минут и 30 секунд
А так если реализовывать security своими руками то, тогда нужна соединяться с AD как уже сказал batigoal. Смысл простой. В LDAPContext кладешь имя и пароль пользователя, указываешь способ аутентификации (simple, md5 и пр.) и соединяешься с LDAP. Если выбрасывается эксепшн (что то типа AuthenticationException , в доках посмотришь) то значит данные пользователя были указаны неверно.

Добавлено через 5 минут и 53 секунды
Если надо могу дать исходник , только не раньше понедельника. 
--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
Vofka
Дата 10.9.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 21.6.2006

Репутация: 1
Всего: 1



Использоваться будет Oracle Aplication Server.От исходников не откажусь. 
PM MAIL   Вверх
vzf
Дата 11.9.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: 2
Всего: 5



Вот так я проверял зарегистрирован ли пользователь в LDAP или нет. Закомментированный блок почему то не работает с AD. Он узнаёт какие способы аутентификации поддерживает сервер LDAP. Но и без него можно обойтись.

Код

public class CActiveDirectoryService
{
    /**
     * AD server host.
     */
    private String host;

    /**
     * AD server domain.
     */
    private String domain;

    /**
     * AD server port.
     */
    private String port;

    /**
     * Prefix for user name.
     */
    private String userNamePrefix;

    /**
     * base for user name
     */
    private String base;

    /**
     * digest method name for the authentication
     */
    private String authDigetsMethod;

    /**
     * defines support LDAP server digest authentication or not 
     */
    private boolean digestMethodSupport;

    /**
     * Logger for this class 
     */
    private static final Logger logger =
            Logger.getLogger(CActiveDirectoryService.class);

    /**
     * Creates new instance.
     */
    public CActiveDirectoryService()
    {

        host = CResourceBundleUtil.getLdapBundleString("ldap.host", null);
        domain = CResourceBundleUtil.getLdapBundleString("ldap.domain", null);
        port = CResourceBundleUtil.getLdapBundleString("ldap.port", null);
        base = CResourceBundleUtil.getLdapBundleString("ldap.base", null);
        userNamePrefix =
                CResourceBundleUtil.getLdapBundleString("ldap.userNamePrefix", null);
        authDigetsMethod =
                CResourceBundleUtil
                        .getLdapBundleString("ldap.auth.digest.method", null);
        digestMethodSupport = false;
    }

    /**
     * Returns true if user with provided credentials is registered 
     * in Active Directory.
     * 
     * @param userName login of the user to check.
     * @param password password of the user.
     * @return true if user with provided credentials is registered 
     * in Active Directory
     * @throws NamingException if smth wrong
     */
    public boolean isUserRegisteredInActiveDirectory(String userName,
            String password) throws NamingException
    {

        String urlDC = "ldap://" + host + "." + domain + ":" + port + "/";
        Hashtable ldapEnv = new Hashtable();
        
        /*
        // getting supported SASL Mechanism for the authentication
        LdapContext ctx = new InitialLdapContext();
        Enumeration enumeration = ctx.getAttributes(urlDC, new String[]
        { "supportedSASLMechanisms" }).getAll();

        while (enumeration.hasMoreElements())
        {
            Attribute attr = (Attribute) enumeration.nextElement();

            if (attr.contains(authDigetsMethod))
            {
                digestMethodSupport = true;
            }
        }

        if (digestMethodSupport)
        {
            ldapEnv.put(Context.SECURITY_AUTHENTICATION, authDigetsMethod);
            ldapEnv.put(Context.SECURITY_PRINCIPAL, userName);
            logger.debug("Authentication method: " + authDigetsMethod);
        }
        else
        {
            ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
            ldapEnv.put(Context.SECURITY_PRINCIPAL, userNamePrefix + userName + ","
                    + base);
            logger.debug("Authentication method: simple");
        }
        */
        
        logger.debug("Authentication method: simple");
        ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
        ldapEnv.put(Context.SECURITY_PRINCIPAL, userNamePrefix + userName); 
        ldapEnv.put(Context.SECURITY_CREDENTIALS, password);
        ldapEnv.put(Context.PROVIDER_URL, urlDC);
        ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        
        try
        {
            LdapContext ctx = new InitialLdapContext(ldapEnv, null);
            return true;
        }
        catch (AuthenticationException e)
        {
            logger.error("Error accessing Active Directory:", e);
            return false;
        }
        catch (NamingException e)
        {
            logger.error("Error accessing Active Directory:", e);
            throw new NamingException("Error accessing Active Directory");
        }
        finally
        {
            if (ctx != null)
            {
                ctx.close();
            }
        }
    }
}

--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
Vofka
Дата 11.9.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 21.6.2006

Репутация: 1
Всего: 1



Спасибо.буду пробовать. 
PM MAIL   Вверх
jsa
Дата 12.9.2007, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 2
Всего: 20



Цитата(Vofka @ 10.9.2007,  20:47)
Использоваться будет Oracle Aplication Server.

Дык, в чем проблема, в OAS это все поддерживаться, SSO настраивай на Windows Native Authentification и будет тебе счастье


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.