【问题标题】:Struts2 return json if authentication failed in interceptor如果拦截器中的身份验证失败,Struts2 返回 json
【发布时间】:2014-04-23 12:41:53
【问题描述】:

请注意,我不是 Java 开发人员,所以我的问题可能有一些令人心碎的假设和无效的代码。

我有一个负责登录身份验证的拦截器。

<global-results>
   <result name="login">/admin/login.jsp</result>
</global-results>

如图所示,当身份验证失败时重定向到 login.jsp,即返回值为“login”(在这种情况下)

我想要实现的是,我返回一些其他值(比如“loginAjax”),它不应该发送 HTTP 302,而是应该返回一个 JSON 响应。

我不知道这是否可能。我在 struts.xml 中有另一部分,它在从 Action 返回特定值时返回 json。

<result name="success" type="json">
    <param name="includeProperties">
        return_id, return_message
    </param>
</result>

我不知道我应该如何将这两个部分联系在一起并让它为同一个拦截器工作。

【问题讨论】:

    标签: java json jsp struts2


    【解决方案1】:

    全局结果与一个或多个拦截器或动作无关:它对每个人都是全局的,因此无论是谁返回它都会在返回时呈现。

    您需要添加一个 json 类型的全局(与您的其他登录结果保持一致,即全局)结果,如下所示:

    <global-results>
        <result name="login">/admin/login.jsp</result>
        <result name="loginAjax" type="json" />
    </global-results>
    

    然后,您可以发送特定的 statusCode 或 errorCode,like described here

    如果你需要了解你应该从拦截器返回什么样的结果,你应该像in this other answer 描述的那样继续,检查结果的类型,以防万一成功。

    P.S:哦,考虑聘请 Java 开发人员来正确地做 Java 工作 :)

    【讨论】:

    • 感谢您的帮助。我会尝试你的解决方案。还有你的建议:P
    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 2018-12-05
    • 1970-01-01
    • 2023-03-22
    • 2015-11-19
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多