请注意,我不是 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>
我不知道如何将这两个部分结合在一起并使其适用于同一个拦截器。
最佳答案
全局结果不依赖于一个或多个拦截器或操作:它对每个人来说都是全局的,因此无论谁返回它,它都会在返回时呈现。
你需要添加一个json类型的全局(与你的其他登录结果保持一致,即全局)结果,如下所示:
<global-results>
<result name="login">/admin/login.jsp</result>
<result name="loginAjax" type="json" />
</global-results>
然后,您可以发送特定的状态代码或错误代码 like described here .
如果您需要了解应该从拦截器内返回什么样的结果,您应该按照 in this other answer 中的描述进行操作。 ,通过检查成功时返回的结果类型。
P.S:哦,考虑雇用一名 Java 开发人员来正确地完成 Java 工作:)
关于java - 如果拦截器中身份验证失败,Struts2 返回 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244626/