mint mvc的拦截器

mint mvc的拦截器是借用了struts的设计,但是和struts的拦截器有较大的区别。先通过一张图直观的了解-下拦截器在mint mvc中所处的位置和作用:

上图清楚的显示,mint mvc对请求静态资源的请求是不做拦截的。拦截器的执行时间在前端控制器之后和action方法之前,这个特点使它在一些情景下很好用,比如全局的权限检查。

为了方便进一步说明拦截器的用法,下面先上一个简单拦截器的代码:

@InterceptorOrder(0)
@InterceptorMapping(urls={"/*", "/"})
public class LoginInterceptor extends Interceptor{
	public void intercept(ActionContext ctx, InterceptorChain chain) throws Exception {
		HttpServletRequest request = ctx.getHttpServletRequest();
		··· ···
		chain.doInterceptor(ctx);
	}
}

拦截器的配置

Interceptor有两个注解用以配置。分别是InterceptorOrder,InterceptorMapping。

  1. InterceptorOrder指定拦截器在拦截器链中顺序,InterceptorOrder的配置数值越小,拦截器在拦截器链中的位置越高前,也越先被调用。
  2. InterceptorMapping配置拦截器对哪些请求起作用,有urls属性,只有两种合法值:精确匹配和通配符匹配。精确匹配形如:"/xyz"或"/xyz/",通配符匹配形如:"/xyz/*"。

拦截器的定义和用法

一个拦截器必须要继承Interceptor抽象类,并且实现interceptor抽象方法。

interceptor抽象方法有两个参数ActionContext 和 InterceptorChain。

ActionContent封装了请求的上下文和mint mvc的启动上下文(在web.xml中配置的参数)。最常用的比如HttpServletRequest和HttpServletResponse对象。

InterceptorChain是拦截器链(栈)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。InterceptorChain有一个公开的方法:doInterceptor(),唯一的参数是ActionContent,此方法允许你自行决定,是否执行拦截器链中剩下的拦截器。如果doInterceptor方法没有被执行,当前请求将直接返回,拦截器链中剩下的未被执行的拦截器和当前请求的action将不会得到执行。

拦截器的使用示例

拦截器顾名思义就是做拦截的,它拦截的是请求。请求被拦截下来之后,根据具体的规则对之进行盘查,再根据盘查结果做出进一步动作。

比如下面这个LoginInterceptor拦截器,它拦截url为“/test/login”请求,做了一件很简单的事情:把一个User对象放到的request里。

@InterceptorOrder(0)
@InterceptorMapping(urls={"/test/login"})
public class LoginInterceptor extends Interceptor{
	public void intercept(ActionContext ctx, InterceptorChain chain) throws Exception {
		HttpServletRequest request = ctx.getHttpServletRequest();
		User user = new User();
		user.setUsername("琼羽");
		user.setPassword("somebody");
		
		request.setAttribute("user", user);
		chain.doInterceptor(ctx);
	}
}

结合“mint mvc的参数”博文可知,mint mvc可以将这个User对象自动取出来传递到你定义的action里,只要你的action定义了类型为:User, 名字为:user的参数。比如这样:

@Mapping(urls="/login")
public String login(User user){
	return "账户:"+user.getUsername()+"<br/>"+
		"密码:"+user.getPassword()+"<br/>";
}
像OSC这种自动登录功能也可以这样做,在拦截器里获取到加密的cookie,然后解密出用户的信息进行登录。

期待你喜欢,期待你玩出更多花样。

本demo下载地址:http://git.oschina.net/895925636/mintdemo/tree/master

项目地址:http://git.oschina.net/895925636/mint-mvc

收录地址:http://www.oschina.net/p/mint-mvc

博客地址:http://www.wemakers.net/home/blog?cate=1001

(完)

转载于:https://my.oschina.net/cnlw/blog/324282

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值