2012-09-15 88 views

回答

3

是的,你可以做到這一點。您可以在配置xml文件中的標籤中定義以下標籤。

<security:form-login login-page="/sessionexpired" 
login-processing-url="/j_spring_security_check" 
default-target-url="/submitLogin" 
always-use-default-target="true" 
authentication-failure-handler-ref="customAuthenticationFailureHandler"/> 

你可以看到最後一個參數設置認證失敗處理程序,裁判它的值是一個refenrece以遵循相同的XML文件中定義的bean。

<bean id="customAuthenticationFailureHandler" class="com.xxx.xxx.xxx.CustomFilter"> 
     <constructor-arg type="String" value="loginfailed"></constructor-arg> 
     <constructor-arg type="org.hibernate.SessionFactory" ref="sessionFactory"></constructor-arg>   
</bean> 

此bean中定義的類是您自己的類,它將獲取有關失敗登錄詳細信息的信息。

public class CustomFilter extends SimpleUrlAuthenticationFailureHandler { 

    private String defaultFailureUrl;  
    private SessionFactory sessionFactory; 


    public CustomFilter(String defaultFailureUrl,SessionFactory sessionFactory) { 
     super(); 
     this.defaultFailureUrl = defaultFailureUrl; 
     this.sessionFactory = sessionFactory; 
    } 

    @Override 
    public void onAuthenticationFailure(HttpServletRequest request, 
      HttpServletResponse response, AuthenticationException exception) 
      throws IOException, ServletException { 
     // TODO Auto-generated method stub 

     String userName = request.getParameter("j_username");; 
     /*System.out.println("CustomFilter Begins");   
     System.out.println("CustomeFilter.username :: " + userName); 
     System.out.println("getMessage :: " + exception.getMessage()); 
     System.out.println("exception :: " + exception.getClass().getSimpleName()); 
     System.out.println("RemoteAddr :: " + request.getRemoteAddr());  */ 
    } 
} 

當認證將失敗那麼這個類的方法onAuthenticationFailure將被調用,您可以獲取用戶的詳細信息有登錄數據庫或日誌文件。

希望這可以幫助你。乾杯。

+1

很好的答案。謝謝 – Richie

+0

@Richie歡迎:) –

相關問題