【问题标题】:RediectAttributes not working with spring securityRedirectAttributes 不适用于 Spring Security
【发布时间】:2014-07-02 05:19:00
【问题描述】:

我在我的应用程序中使用 Spring Security。

在我的一个控制器方法中,我重定向到另一个控制器方法并附加模型属性,但我没有在下一个控制器方法中获取这些模型属性。

发生这种情况是因为来自 Spring Security Filter 的一些内部重定向可能会杀死那些重定向 flash 属性吗?

这是我的代码:

@RequestMapping("/method1")
public String firstMethod(Model model,RedirectAttributes redirectAttributes) {
  ... do something ...
  redirectAttributes.addFlashAttributes("message","This is a test message");
  return "redirect:/method2";
}

@RequestMapping("/method2")
public String secondMethod(@ModelAttribute("message") String message, Model model) {
  ... do something ...

  return "some_view";
}

这里的 secondMethod 消息是空白(“”);

【问题讨论】:

  • 尝试改用model.addAttribute()
  • model.addAttribute 无法在重定向中存活

标签: spring-mvc spring-security response.redirect


【解决方案1】:

使用addAttribute 而不是addFlashAttributes

阅读区别here

@RequestMapping("/method1")
public String firstMethod(Model model,RedirectAttributes redirectAttributes) {
  redirectAttributes.addAttribute("message","This is a test message");
  return "redirect:/method2";
}

@RequestMapping("/method2")
public String secondMethod(@ModelAttribute("message") String message, Model model) {
  return "some_view";
}

【讨论】:

    【解决方案2】:

    如果你使用重定向,它不会携带标题或属性。但是你可以维护会话,如果它在同一个应用程序中,你可以使用它。使用重定向意味着创建新的请求。

    你最好使用自定义 falsh 范围

    【讨论】:

    • 你是对的。但这就是为什么从 Spring 3.1 开始,他们添加了 RedirectAttributes,它允许重定向请求携带模型属性。这在我的情况下似乎不起作用,因为我认为一些 Spring Security 过滤器正在重定向请求,但没有从以前的请求中添加 flash 属性。
    • 查看此链接您可以找到答案stackoverflow.com/questions/5863472/…
    猜你喜欢
    • 1970-01-01
    • 2021-01-24
    • 2021-03-25
    • 2015-11-03
    • 2015-10-02
    • 2014-11-29
    • 2020-12-02
    • 2016-04-16
    • 2017-08-07
    相关资源
    最近更新 更多