如何在重定向后返回Jersey MVC可见?

问题描述 投票:1回答:1

TLDR:我的方法需要2个重定向/转发才能工作(1个用于身份验证,1个用于jsp页面)。我如何解决两个重定向/转发(或使其成为非必需项),以免遇到错误java.lang.IllegalStateException:提交响应后无法转发。

有关更多上下文:

我有一个Java Servlet,其方法类似于以下内容:

@GET
@Path("/test")
@Authenticate
public Viewable test(@Context HttpServletRequest request, @Context HttpServletResponse response) {
    Map<String, Object> model = createModel();
    return new Viewable("/somePath/jspFile", model);
}

@ Authenticate批注会截获进行某些Open ID Connect类型身份验证的调用,这会导致用户出于所有身份验证需求而转发到其他服务器。如果用户通过了身份验证,他们将被重定向回我的应用程序。

但是,当访问此方法的URL时,我得到的是[[java.lang.IllegalStateException:提交响应后无法转发]。我对使用此Viewable类不太了解,但是基于以下事实:在返回String / void /其他任何东西时,我都不会遇到该错误,我假设返回一个新的Viewable需要进行一些转发会导致用户看到jsp页面。

我已经阅读了主要的SO post about this error,但不确定如何将修复程序应用于当前问题。例如,我不知道如何应用以下修复程序:

protected void doPost() { if (someCondition) { sendRedirect(); } else { forward(); } }

该修复程序假设我可以重定向或转发,但是我当前的方法需要重定向以进行身份​​验证,并且需要转发/重定向来提供jsp页面。也许我缺少一个明显的修复方法,它不需要对当前代码进行彻底的修复?

编辑:如果可以先检查用户是否已通过身份验证,那将是很好的选择,但我认为使用此批注会自动进行初始重定向

编辑:看起来用户已被重定向以进行初始登录身份验证,但是由于SSO,因此在经过一次身份验证后无需再次重定向。>

TLDR:我的方法需要2个重定向/转发才能工作(1个用于身份验证,1个用于jsp页面)。我如何解决两个重定向/转发(或使其成为非要求),以免遇到...

java jsp servlets jersey forward
1个回答
0
投票
基于一些初步测试,似乎以下解决方案对我有用:
© www.soinside.com 2019 - 2024. All rights reserved.