SpringMVC的拦截器与Controller里return "redirect:XXX"的问题

自己在网上也找到遇到同样问题的两篇文章:

http://q.cnblogs.com/q/62314/

http://stackoverflow.com/questions/9786028/spring-mvc-interceptor-addobject/9786096#9786096

下面分享一下个人对这个问题的解决办法,同时也请有更好解决方法的高手不吝指教!

首先是controller层:(这是点击页面“注册”按钮,表单提交的action)

// 保存到数据库
	@RequestMapping(value = "doRegister", method = RequestMethod.POST)
	public RedirectView createUser(@ModelAttribute("user") User user, RedirectAttributes redirectAttributes,
			HttpServletResponse response) {

		// 模拟数据库保存
		System.out.println(user.getUsername() + "   is saved!");
		redirectAttributes.addAttribute("username", user.getUsername());
		return new RedirectView("{username}");
	}

    // 注册成功后展现用户主页
    @RequestMapping(value = "{username}", method = RequestMethod.GET)
    public String showUserHome(@PathVariable String username, Model model, HttpServletRequest request) {
             model.addAttribute(username);
        return request.getAttribute(Keys.SKIN_DIR_NAME) + "home";
    }

其次是拦截器:(加入一些全局配置,如基本的站点信息)

@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2,
			ModelAndView modelAndView) throws Exception {

		final Map<String, Object> model = modelAndView.getModel();

		if (!(modelAndView.getView() instanceof RedirectView)) {
			model.put("param1", "value1");
			model.put("param2", "value2");
			model.put("param3", "value3");
		} else {
			//进行其它操作
		}

	}

关键点是org.springframework.web.servlet.view.RedirectView。

时间: 2024-08-03 15:51:17

SpringMVC的拦截器与Controller里return "redirect:XXX"的问题的相关文章

SpringMVC处理器拦截器

一.简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.常见应用场景如下: 日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求

基于注解风格的Spring-MVC的拦截器

基于注解风格的Spring-MVC的拦截器 Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter: < bean class ="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerM

SpringMVC:拦截器

SpringMVC:拦截器 2019-10-19 / Java / 狂神说位置: Home » Java » 本页 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截 拦截器 拦截器是

SpringMVC使用拦截器

拦截器也算得上是spring中的一大特色,即使没用过spring的拦截器至少也用过struts2的拦截器,拦截器大多数情况都是用来做权限的控制的,极少情况下用来初始化资源或释放资源.springmvc当然也可以直接使用拦截器,而且使用起来也特别简单. 一  springmvc的拦截器实现方式 springmvc实现拦截器主要有以下2种方式: 1 实现HandlerInterceptor接口 package com.sxt.interceptor; import javax.servlet.htt

springMVC之拦截器

有两种方法配置spring的拦截器 1. 实现接口: HandleInterceptor public class MyInterceptor1 implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception { Syste

SpringMVC经典系列-14自定义SpringMVC的拦截器---【LinusZhu】

注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系[email protected],敬请朋友们斧正,谢谢. 这部分主要讲解SpringMVC的拦截器的部分,会带着大家完成定义拦截器的两种方式的实例,不多说了,开始-- SpringMVC的拦截器主要是用于拦截用户的请求,并且进行相应的处理,如:权限验证.判断登录等. 定义拦截器的两种方式,如下: 1. 实现接

SpringMVC 登陆拦截器实现登陆控制

思路,先登陆后,将登陆信息存储在session中,然后通过拦截器,对系统中的页面和资源进行访问拦截,同时对于登陆本身相关的页面和资源不拦截. 实现方法: /**  * 登陆拦截器.  *  * @author leizhimin 2014/6/26 16:08  */ public class LoginInterceptor extends HandlerInterceptorAdapter {     private static final String[] IGNORE_URI = {"

springmvc中拦截器与springmvc全局异常处理器的问题

最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 中抛出了系统自定义异常, 当时有有个疑惑, 就是抛出的这个异常全局异常处理器怎么处理的. 这里的全局异常处理器时通过实现HandlerExceptionResolver这个借口实现的 要指出的是 resolveException方法 中 handler中代表的是什么,我没遇到这个问题之前我认为这玩

springMVC的拦截器工作流程

首先,springmvc的拦截器配置在这就不多说了.主要讲一下拦截器的三个方法的执行顺序. preHandle方法一定是最先执行的方法,如果它返回为false下面的方法均不执行. postHandle是在返回再次调用拦截器的方法. afterCompletion方法是最终执行的方法,可以看做finally,用于关闭一些一定要close的东西. 下面附上流程图