Spring mvc重定向传递参数

    xiaoxiao2021-12-14  18

    问题背景: 做电商项目,有些操作需要登录才能进行,一个url被session过滤器拦截后,被链接到登录界面,输入账号、密码等信息后,登录成功,还需回到用户请求的url,并且需要此url携带登录前的参数 1、session过滤器获取参数

    //获取用户请求的url String pathInfo = request.getRequestURI(); //获取URL携带的参数 StringBuffer params=new StringBuffer(); Map<String, String[]> map = request.getParameterMap(); Set<Entry<String, String[]>> set = map.entrySet(); Iterator<Entry<String, String[]>> it = set.iterator(); while (it.hasNext()) { Entry<String, String[]> entry = it.next(); params.append(entry.getKey()); params.append("="); for (String i : entry.getValue()) { params.append(i); } params.append("&"); } request.getSession().setAttribute("redirectUrl", pathInfo.substring(pathInfo.indexOf(request.getContextPath())+request.getContextPath().length())); request.getSession().setAttribute("params", params.toString()); response.sendRedirect(request.getContextPath()+"/member/login.html")

    2、登录成功后,回到url,并携带参数 方法一:用ModelAndView传递参数

    @RequestMapping(value={"login"},method={RequestMethod.POST}) public ModelAndView login(HttpServletRequest request){ //登录操作 ..... //用户请求的url String redirectUrl=(String) session.getAttribute("redirectUrl"); if(StringUtils.isNotEmpty(redirectUrl)){ //获取url携带的参数 String params=(String) request.getSession().getAttribute("params"); ModelAndView model=new ModelAndView("redirect:"+redirectUrl); for(String param:params.split("&")){ model.addObject(param.split("=")[0],param.split("=")[1]); } return model; }

    方法二:用RedirectAttributes传递参数

    @RequestMapping(value={"login"},method={RequestMethod.POST}) public String login(HttpServletRequest request,RedirectAttributes attr){ //登录操作 ..... //用户请求的url String redirectUrl=(String) session.getAttribute("redirectUrl"); //获取url携带的参数 String params=(String) request.getSession().getAttribute("params"); for(String param:params.split("&")){ attr.addAttribute(param.split("=")[0],param.split("=")[1]); } //回到用户请求的url return "redirect:"+redirectUrl; }
    转载请注明原文地址: https://ju.6miu.com/read-971536.html

    最新回复(0)