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页面)。如何解决两个重定向/转发(或使其成为非要求),以免遇到...