2009-11-17 143 views
2

我正在使用LDAP的Spring Security作爲應用程序,並且希望在用戶登錄時登錄用戶代理。但是,我無法訪問Authorities Populator中的請求對象我無法從那裏訪問用戶代理信息。使用Spring Security登錄登錄時的用戶代理信息

我也嘗試在記錄器(log4j)中設置模式,因此它會通過放入%X {user-agent}來記錄用戶代理,但這也不起作用。

我想要做的就是在用戶登錄時記錄用戶代理信息。因此,如果在Spring的安全框架中有一個方法,我可以重寫那些可以訪問登錄對象上的請求,這將是理想的。

OR

如果我能得到log4j的記錄whenver到日誌中的條目由用戶代理,這將是罰款,以及。

回答

3

擴展AuthenticationDetailsS​​ourceImpl

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> 
+0

感謝您的回答,就像一個魅力。 – Zoidberg 2009-11-17 17:18:04