Gwt 为什么我的登录页面在弹出窗口中显示为文本而不是格式化的HTML

Gwt 为什么我的登录页面在弹出窗口中显示为文本而不是格式化的HTML,gwt,spring-security,Gwt,Spring Security,我正在使用GWT和Spring security来管理用户登录。 为什么当会话到期,我尝试在我的应用程序中执行某些操作时,我会得到一个弹出窗口,其中以文本形式显示登录页面的HTML内容,而不是指向格式正确的登录页面 我的实现基于。 我的配置如下所示: <security:http> <security:intercept-url pattern="/login.jsp" filters="none" /> <security:intercep

我正在使用GWT和Spring security来管理用户登录。 为什么当会话到期,我尝试在我的应用程序中执行某些操作时,我会得到一个弹出窗口,其中以文本形式显示登录页面的HTML内容,而不是指向格式正确的登录页面

我的实现基于。 我的配置如下所示:

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


如果有任何帮助,我们将不胜感激。

根据您所写的内容,我假设您有一个HTML字段,您可以使用如下内容:

final HTML html= new HTML(text);
//or    
final HTML html= new HTML();
html.add(text);
其中文本是格式化的html(类似于下面的
用户名:…
)。现在的问题是,您得到的输出正好是
用户名:…
,而不是预期的用户名:格式为h1等等

这是因为HTML类会自动将您放入其中的文本转义为“安全HTML”文本。(见附件)

要实际输出格式化的html,必须创建一个安全的html类。下面是一个简单的例子:

SafeHtml safeHtml = new SafeHtml() {

            @Override
            public String asString() {
                return "<h1>Username</h1>";
            }
        };
SafeHtml SafeHtml=new SafeHtml(){
@凌驾
公共字符串asString(){
返回“用户名”;
}
};
然而,你应该阅读的


希望这是你的问题我想回答我自己的问题,希望它对其他人有用

整个问题都是由于我处理InvocationException的方式造成的,当用户试图执行被Spring security阻止的操作时(例如由于会话超时),会抛出InvocationException

我使用Window.alert(“向用户解释,详细信息”+e.getMessage())显示了一个弹出窗口,其中message是从服务器接收到的异常消息。如果服务器真的发送了一个异常,这就可以了,但是在Spring试图将用户重新定向到登录页面的情况下,似乎显示的是JSP页面本身!!!我创建了自己的弹出窗口(使用GWT的对话框),现在问题解决了


经验教训:除了调试之外,不要使用Window.alert()进行任何操作

请显示您的login.jsp代码在用户登录之前登录页面显示正确。。。在用户也注销之后。。。只有当用户因“意外”(会话过期)而注销并且用户试图在应用程序(GWT应用程序)中执行某些操作时,才会出现问题,因此我认为login.jsp页面与此无关(它是纯jsp,与GWT无关).这不是构建safehtml实例的好方法-它甚至可能会鼓励开发人员开始在其中混合变量,然后我们就像safehtml不存在一样糟糕。鼓励使用SafeHtmlBuilder,以及转义文本与允许已知良好常量的方法。您的示例并不是不安全的,但它可能会向一些人建议,可以接受自己将SafeTHTML子类化。。。但是,我仍然没有发现SafeHtml类打算如何使用…:/SafeHtmlBuilder适用于大多数情况,SafeHtmlTemplates也相当不错。如果必须,请求助于安全解决方案。通常,您不会过多地使用这些SafeHtml实例,而是将它们传递给小部件(除非您自己构建小部件)。最大的用例是单元格,因此可以快速/安全地构建大型复杂单元格表。我感谢您的帮助,但问题与此无关,因为我的登录页面是纯jsp页面,而不是由GWT呈现的。GWT应用程序仅在用户成功登录后加载。问题是,当会话过期(用户因此注销)时,Spring会尝试将用户重定向到login.jsp,但由于某种原因,jsp页面不会被重定向,而是显示为弹出窗口中的文本。