Springboot 网页重定向时向前端传递参数Model类失效

这篇博客探讨了在Spring MVC中如何在登录过程中正确传递错误消息。通过使用`RedirectAttributes`,可以在重定向后保持消息的隐秘性,并在目标页面中获取。文章介绍了`addFlashAttribute`方法的工作原理,它将属性暂存到session中,仅在重定向的页面一次可用。示例代码展示了如何设置和获取这些属性。
摘要由CSDN通过智能技术生成
    @RequestMapping("/login")
    public String login(@RequestParam String username,
                        @RequestParam String password, HttpSession session, Model model)
    {
//        RedirectAttributes attributes
        User user = userservice.checkUser(username,password);
        if(user!=null)
        {
            user.setPassword(null);
            session.setAttribute("user",user);


        }
        else {
            model.addAttribute("message","密码错误");
//            attributes.addFlashAttribute("message","密码错误");
            return  "redirect:/admin";
        }
        return "admin-index";

    }

这样message就传不过去

推荐使用

RedirectAttributes 
    @RequestMapping("/login")
    public String login(@RequestParam String username,
                        @RequestParam String password, HttpSession session,  RedirectAttributes attributes)
    {

        User user = userservice.checkUser(username,password);
        if(user!=null)
        {
            user.setPassword(null);
            session.setAttribute("user",user);


        }
        else {
            attributes.addFlashAttribute("message","密码错误");
            return  "redirect:/admin";
        }
        return "admin-index";

    }

方法推荐:

1. redirectAttributes.addAttributie("param", value);

这种方法相当于在重定向链接地址追加传递的参数。以上重定向的方法等同于 return "redirect:/hello?param=value" ,注意这种方法直接将传递的参数暴露在链接地址上,非常的不安全,慎用。

2. redirectAttributes.addFlashAttributie("param", value);

这种方法是隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页面” 获取 param 参数值。其原理就是将设置的属性放到 session 中,session 中的属性在跳到页面后马上销毁

注意:这种方式在页面中可以正常获取,但是跳转目标是控制器方法的情况下,需要使用 @ModelAttribute 注解绑定参数后才能获取。

package com.pudding.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class RedirectController {

	@RequestMapping("/set-flash-attribute")
	public String setFlashAttribute(RedirectAttributes redirectAttribute) {
		redirectAttribute.addFlashAttribute("username", "jack");
		return "redirect:/user-information";
	}

	@RequestMapping("/user-information")
	public String get(@ModelAttribute("username") String username) {

		System.out.println(username);

		return "/user-information";
	}

}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值