首页 > 解决方案 > Flash 属性不适用于 https - 适用于 http

问题描述

我有一个在本地运行的 spring webapp。它工作得很好,并且可以完美地将 Flash 属性传递给重定向时的另一个控制器。

当我在 openshift 上抛出这个时,使用 https 路由时 flash 属性功能会停止工作。但是,如果我使用 http 路由,它仍然可以正常工作。

这是我的重定向传递方法,它在路径中接收一个 id,执行一些逻辑并重定向到 /foo 端点,通过 someVariable。

@GetMapping("/foo/{someId}")
public ModelAndView redirectFoo(@RequestHeader HttpHeaders headers, @PathVariable(value = "someId") String someId, RedirectAttributes attributes) {
    //..some logic
    attributes.addFlashAttribute("someVariable", someVariable);
    return new ModelAndView("redirect:/foo");
}

redirectFoo 重定向到 /foo 并通过 flash 属性将 someVariable 传递给 /foo

@GetMapping("/foo")
public ModelAndView get(@RequestHeader HttpHeaders headers, @ModelAttribute("someVariable") String someVariable) {
    //...some logic with someVariable...
    return new ModelAndView("foo");
}

这一切都在本地工作得很好。但是当我把它放在 openshift 上时,它就不能正常工作。

*编辑:这似乎不是 openshift 问题,而是 https 问题。如果我使用 http 路由,则 flash 属性可以正常工作。如果我使用 https 路由,他们不会。

标签: javaspringhttpsopenshift

解决方案


正如格雷厄姆在评论中所说,我的应用程序重定向到http而不是https. 为了解决这个问题,我只需要将重定向方法更改为

@GetMapping("/foo/{someId}")
public RedirectView redirectFoo(@RequestHeader HttpHeaders headers, @PathVariable(value = "someId") String someId, RedirectAttributes attributes) {
    //..some logic
    attributes.addFlashAttribute("someVariable", someVariable);
    RedirectView redirectView = new RedirectView("/foo");
    redirectView.setHttp10Compatible(false);
    return redirectView;
}

推荐阅读