2012-02-15 50 views
0

我正在使用GWT和Spring安全性來管理用戶登錄。 爲什麼我會得到一個彈出窗口,其中包含我的登錄頁面的HTML內容文本,而不是被定向到我的格式正確的登錄頁面,屆時會話過期,我嘗試在我的應用程序中做一些事情?爲什麼我的登錄頁面顯示爲彈出式文本,而不是格式化的HTML

我已經根據我的this post實施。 我的配置是這樣的:

<security:http> 
    <security:intercept-url pattern="/login.jsp" filters="none" /> 
    <security:intercept-url pattern="/styles/images/**" filters="none" /> 
    <security:intercept-url pattern="/styles/*/images/**" filters="none" /> 
    <security:intercept-url pattern="/styles/*/*.css" filters="none" /> 
    <security:intercept-url pattern="/styles/*.css" filters="none" /> 
    <security:intercept-url pattern="/**" 
     access="ROLE_USER" /> 
    <security:form-login 
     login-page="/login.jsp" 
     default-target-url='/my-app.html' always-use-default-target="true" /> 
    <security:logout logout-success-url="/login.jsp" /> 
    <security:form-login authentication-failure-url="/login.jsp" default-target-url="/login.jsp"/> 

</security:http> 

任何幫助,將不勝感激。

+0

請出示您的login.jsp的代碼 – BraginiNI 2012-02-15 06:15:28

+0

登錄頁面顯示正確的......並且用戶將被註銷,以及在用戶登錄之前...問題僅出現在當用戶被「意外退出「(會話過期),用戶嘗試在應用程序中執行某個操作(這是一個GWT應用程序),所以我認爲login.jsp頁面不相關(它是純JSP,與GWT無關)。 – Renato 2012-02-16 04:51:49

回答

0

我想回答我的問題,希望它可能是其他人有用。

整個問題是由於我處理InvocationException的方式造成的,當用戶試圖執行被Spring安全阻止的操作時(例如由於會話超時),會引發這種情況。

我通過使用Window.alert(「對用戶的解釋,細節」+ e.getMessage())顯示了一個彈出窗口,其中message是從服務器接收的來自Exception的消息。如果服務器實際發送了一個異常,這可以正常工作,但在Spring嘗試將用戶重定向到登錄頁面的情況下,似乎顯示的是JSP頁面本身!我創建了自己的彈出窗口(使用GWT的DialogBox),現在問題已解決。

經驗教訓:不要使用Window.alert()進行調試以外的任何操作!

0

根據您書面方式是什麼,我想,你有你使用的東西,像這樣的HTML領域:

final HTML html= new HTML(text); 
//or  
final HTML html= new HTML(); 
html.add(text); 

其中文本是格式化後的HTML(像這樣<h1>username:</h1>...)。現在的問題是,你得到的輸出正好是<h1>username:</h1>...,而不是你所期望的用戶名:格式化爲h1等等。

這是因爲HTML程序自動類逃脫你,你把它「SafeHTML」的文本。 (見Developer's Guide - SafeHtml

要actaully輸出格式的HTML,你必須創建一個SafeHTML類。下面是一個簡單的例子:

SafeHtml safeHtml = new SafeHtml() { 

      @Override 
      public String asString() { 
       return "<h1>Username</h1>"; 
      } 
     }; 

但是,您應該閱讀Developer's Guide - SafeHtml

希望這是你的問題^^

+0

這不是構建safehtml實例的好方法 - 它甚至可能鼓勵開發人員在那裏開始混合變量,然後我們就像SafeHtml不存在一樣糟糕。鼓勵使用SafeHtmlBuilder,以及轉義文本的方法vs允許已知的好常量。你的例子並不是不安全的,但它可能暗示某些人可以自己繼承SafeHtml。 – 2012-02-15 16:02:19

+0

是的,我知道...但是我仍然沒有發現SafeHtml類是如何被使用的......:/ – Stefan 2012-02-15 22:24:30

+0

SafeHtmlBuilder適合大多數情況,SafeHtmlTemplates也不錯。如果必須,請使用SafeHtmlUtils。一般來說,您不會過多地使用這些SafeHtml實例,而是將它們傳遞給小部件(除非您自己構建小部件)。最大的用例是針對單元格,因此可以快速/安全地構建複雜單元格的大型表格。 – 2012-02-16 02:29:13

相關問題