Регистрация информации пользовательского агента при входе в систему с помощью Spring Security

Я использую Spring Security с LDAP для приложения и хочу регистрировать пользовательский агент, когда пользователь входит в систему. Однако я не могу получить доступ к объекту запроса в заполнителе полномочий, поэтому я не могу получить доступ к пользовательскому агенту. информация оттуда.

Я также попытался установить шаблон в нашем регистраторе (log4j), чтобы он регистрировал пользовательский агент, вставив %X{user-agent}, но это тоже не сработало.

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

OR

Если я смогу заставить log4j записывать пользовательский агент всякий раз, когда делается запись в журнале, это тоже будет хорошо.


person Zoidberg    schedule 17.11.2009    source источник


Ответы (1)


Расширьте AuthenticationDetailsSourceImpl:

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

public class UserAgentAuthenticationDetailsSourceImpl extends  
                               AuthenticationDetailsSourceImpl {

    public Object buildDetails(HttpServletRequest request) {
            String userAgent = request.getHeader("User-Agent");
            return super.buildDetails(request);
    }
}

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

<bean id="authenticationProcessingFilter"
      class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
    ...
    <property name="authenticationDetailsSource">
        <bean class="UserAgentAuthenticationDetailsSourceImpl"/>
    </property>
</bean>
person rodrigoap    schedule 17.11.2009