2012-03-15 18 views
2

我使用Spring MVC的,春天的安全對我們的Web應用程序。成功登錄後,請求會被重定向到一個HTML頁面(login.html)。我們有大約4個使用Ext-JS後執行的AJAX調用。傳遞JSON數據到HTML認證成功後 - 春季安全和Spring MVC

我必須成功登錄後發送JSON數據的要求。這意味着JSON數據必須與登錄頁面一起傳遞給客戶端。在登錄頁面上,我們需要訪問這個JSON數據並進行渲染。坦率地說,這是在login.html頁面上由Ext-JS代碼請求的相同數據。我們的目標是避免AJAX呼叫的額外請求。

我嘗試了在計算器和其他網站的各種實例(只是避免提,以防止雜亂),並創建一個自定義的認證處理,並適當地進行更改。一切正常,但不是發送JSON /任何數據到客戶端的方式。下面

是應用程序的context.xml

<http auto-config="false" use-expressions="true"> 
     <form-login login-page="/login" 
        login-processing-url="/static/j_spring_security_check"      
        authentication-failure-url="/login?login_error=t" 
        authentication-success-handler-ref="customAuthHandler" 
        authentication-failure-handler-ref="customAuthHandler" 
        default-target-url="/html/index.html" 
        always-use-default-target="true"/> 

    <beans:bean id="customAuthHandler" 
      class="com.mycompany.security.CustomAuthenticationHandler"/> 

論CustomAuthenticationHandler的onAuthenticationSuccess方法我有下面的代碼,看看我能得到這個值的配置,但我不能。我的理解是,因爲它的HTML /靜態內容我不能將會話值傳遞給客戶端,並且需要成爲JSP。 (如有錯誤請指正!)我不能HTML變爲JSP官僚原因:

測試1:

request.getSession(true).setAttribute("ssntest", "hello:how:are:you"); 

測試2:

HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response); 

    Writer out = responseWrapper.getWriter(); 

    String targetUrl = "/login"; 
    out.write("{success:true, targetUrl : \'" + targetUrl + "\'}"); 
    out.close(); 

會是一個什麼方式在成功的身份驗證和HTML上傳遞JSON值。

+0

我不知道,如果這個問題不清楚,請建議讓我冷以更好的方式對其進行更新。謝謝。 – oneworld 2012-03-15 17:19:08

+0

任何人,請幫助我。提前致謝。 – oneworld 2012-03-16 06:17:31

+0

我認爲這是一個有點不清楚確實如此。除了您試圖將JSON數據傳遞給login.html但未成功之外,我並不真正瞭解您的問題。但我並不真正瞭解你究竟是如何傳遞這個JSON數據的(按照HTTP/HTML/JavaScript的)。但我不知道Spring和所有這些Java的東西,所以我可能沒有太多的幫助。 – 2012-03-16 12:05:48

回答

0

保持這種會話數據的心不是一個好辦法,但你可以嘗試@SessionAttributes註釋,用SpringMVC通過提供。另請參閱answer

問題的關鍵是將您的JSON值保存到登錄頁面的會話中,然後在成功驗證後將其返回到另一個AJAX請求中。