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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring Security + AuthenticationServiceException 
V
    Опции темы
unkis
Дата 3.1.2012, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет,

Проблема в следуюшем:

Пользователь проходит аутентификацию, при этом происходят различного рода проверки, такие как количество неудачных логинов и так далее.

Нужно сделать так, что в зависимости от проверки, если полъзователь её не прошел, пользователь переадресовывался на старничку с ошибкой, но эта ошибка менялось динамически, взависимости от проверки.

В какую сторону копать и как такое реализовать?

Есть такой вот код

Код

public class UserDetailsContextMapperITP extends LdapUserDetailsMapper
{

    @Resource(name = "AccountDao")
    private AccountDao accountDao;

    /* (non-Javadoc)
     * @see org.springframework.security.ldap.userdetails.UserDetailsContextMapper#mapUserFromContext(org.springframework.ldap.core.DirContextOperations, java.lang.String, java.util.Collection)
     */
    @Override
    @Transactional
    public UserDetails mapUserFromContext(DirContextOperations ctx, String username,
            Collection<GrantedAuthority> authority)
    {
        boolean accountNonExpired = true;
        boolean credentialsNonExpired = true;
        boolean accountNonLocked = true;

        final Account account = accountDao.findAccountByUsername(username);
        if (account == null)
        {
            throw new AuthenticationServiceException("Benutzer ist nicht in AFS registriert");
        }
        if (account.getAktiv() == false)
        {
            throw new AuthenticationServiceException("Benutzerkonto ist deaktiviert");
        }
        if (account.getLoginFailures() >= 3)
        {
            throw new AuthenticationServiceException("Maximale Anzahl an Login Versuchen überschritten");
        }

        return new UserDetailsITPImpl(account, accountNonExpired, credentialsNonExpired, accountNonLocked);
    }


и вот такая вот переадресация в security-config.xmл

Код

<security:form-login login-page="/faces/login.xhtml"
            default-target-url="/faces/anmeldungErfolgreich.xhtml"
            authentication-failure-url="/faces/loginError.xhtml" />



PM MAIL WWW   Вверх
MisterCleric
Дата 3.1.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Что у тебя находится на странице loginError.xhtml?
Поковыряйся, пожалуйста, в документации и исходниках SS.
Есть там такой request-attribute - 
Код

<c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.




--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
unkis
Дата 3.1.2012, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



о спасиибо, работает.

А сушествует ли возможность перенаправлять на разние error-страницы?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
MisterCleric
Дата 3.1.2012, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Цитата

А сушествует ли возможность перенаправлять на разние error-страницы? 

Да:
org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler
Появился в версии 3.0


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
unkis
Дата 3.1.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



О спасибо, а на странице понять что за Exception была брошена?

Я имею ввиду, есть ли у страницы информация, что за exception была брошена?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
MisterCleric
Дата 4.1.2012, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Цитата

Я имею ввиду, есть ли у страницы информация, что за exception была брошена? 

Если ты имеешь в виду как на странице понять, что за Exception, то RequestAttribute SPRING_SECURITY_LAST_EXCEPTION как раз и есть инстансом Exception.


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
unkis
Дата 4.1.2012, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, а вот теперь у меня вот такая проблема, точней не проблема, просто я наверное ожидал от spring другое.
Это по поводу org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandleр

Есть вот такой маппинг:
Код

<bean id="authenticationFailureHandler"
        class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
        <property name="exceptionMappings">
            <props>
                <prop
                    key="org.springframework.security.authentication.BadCredentialsException">/faces/badCredentialsError.xhtml</prop>
                <prop
                    key="org.springframework.security.authentication.DisabledException">/faces/userDisabledError.xhtml</prop>
                <prop 
                                        key="org.springframework.security.core.AuthenticationException">/faces/loginError.xhtml</prop>
            </props>
        </property>
    </bean>


Как видно, последяя строчка 
Код

<prop 
           key="org.springframework.security.core.AuthenticationException">/faces/loginError.xhtm</prop>


привязивает org.springframework.security.core.AuthenticationExceptioн к вот этой странице /faces/loginError.xhtm

Эта Exception являеться родителям для тех других Exceptions.

так вот, когда я в коде выбрасиваю Exception, которая не указана в Маппинге явно, но является ребёнком указаной в маппенге Exception, я ожидал и ожидаю что меня перебросит на странизу указываюшей родительской Exception.

то есть
если я бросаю такую вот exception
Код

throw new AuthenticationServiceExceptioн("Benutzer ist nicht in AFS registriert");


то так как AuthenticationServiceException является подклассом org.springframework.security.core.AuthenticationExceptioн то я ожидаю что перебросит на /faces/loginError.xhtm

но вместо этого мне spring показивает такое сообшения
Код

2012-01-04 14:23:21,314 DEBUG org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication(AbstractAuthenticationProcessingFilter.java:318) - Authentication request failed: org.springframework.security.authentication.AuthenticationServiceException: Benutzer ist nicht in AFS registriert
2012-01-04 14:23:21,314 DEBUG org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication(AbstractAuthenticationProcessingFilter.java:319) - Updated SecurityContextHolder to contain null Authentication
2012-01-04 14:23:21,314 DEBUG org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication(AbstractAuthenticationProcessingFilter.java:320) - Delegating to authentication failure handlerorg.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler@37263a93
2012-01-04 14:23:21,315 DEBUG org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler.onAuthenticationFailure(SimpleUrlAuthenticationFailureHandler.java:56) - No failure URL set, sending 401 Unauthorized error
2012-01-04 14:23:21,315 DEBUG org.springframework.security.web.context.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper.saveContext(HttpSessionSecurityContextRepository.java:338) - SecurityContext is empty or anonymous - context will not be stored in HttpSession. 


Получается, я не могу перенаправить любую не замаленную Exception на странизу с ошибкой по умолчанию или всё же могу?





--------------------
www.unkis.com
PM MAIL WWW   Вверх
MisterCleric
Дата 5.1.2012, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Цитата

то так как AuthenticationServiceException является подклассом org.springframework.security.core.AuthenticationExceptioн то я ожидаю что перебросит на /faces/loginError.xhtm

У SimpleUrlAuthenticationFailureHandler есть такое проперти defaultFailureUrl.
Вот его и установи как /faces/loginError.xhtml в конфиге твоего бина authenticationFailureHandler вместо последнего меппинга.
А вот что Люк Тейлор пишет в JavaDoc к ExceptionMappingAuthenticationFailureHandler:
Цитата

/**
 * Uses the internal map of exceptions types to URLs to determine the destination on authentication failure. The keys
 * are the full exception class names.


Господа, читайте книжки на здоровье...
А я от себя еще добавлю: и исходники тоже.


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
unkis
Дата 5.1.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо большое то что нужно


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

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

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


 




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


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

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