Пользовательская аутентификация - PullRequest
0 голосов
/ 18 ноября 2009

В моей системе 2 подсистемы. Каждая подсистема имеет различный набор пользователей. У каждого пользователя есть дополнительное поле «SystemName», которое можно использовать для определения системы, к которой принадлежит этот пользователь.

В формах входа (1 форма для каждой подсистемы) я добавил скрытое поле, указывающее тип формы (содержащий значение SystemName).

Как правило, проверка довольно проста:

if (user.systemName == params.systemName) {
    proceed with regular login
} else {
    throw standard login error
}

Я попытался поставить эту проверку на свой пользовательский DaoAuthenticationProvider, но у него нет доступа к "params.systemName".

Где я могу разместить этот код, чтобы Acegi аутентифицировал моих пользователей с помощью этой проверки?

Заранее спасибо.

1 Ответ

1 голос
/ 18 ноября 2009

Вот как я это сделал на Java. Расширить WebAuthenticationDetails :

import javax.servlet.http.HttpServletRequest;
import org.acegisecurity.ui.WebAuthenticationDetails;

public class SystemNameWebAuthenticationDetails extends WebAuthenticationDetails {

    public SystemNameWebAuthenticationDetails() {
        super();
    }

    public SystemNameWebAuthenticationDetails(HttpServletRequest request) {
        super(request);
        this.systemName = request.getParameter("systemName");
    }

    public String getSystemName() {
        return systemName;
    }

    private String systemName;
}

Установите его в фильтре аутентификации:

<bean id="authenticationProcessingFilter"
      class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
      ...
      <property name="authenticationDetailsSource">
        <bean class="org.acegisecurity.ui.AuthenticationDetailsSourceImpl">
            <property name="clazz" value="SystemNameWebAuthenticationDetails"/>
        </bean>
      </property>
</bean>

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

SecurityContextHolder.getContext().getAuthentication().getDetails()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...