文档章节

mint mvc的拦截器

水牛叔叔
 水牛叔叔
发布于 2014/10/05 01:21
字数 902
阅读 170
收藏 0

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

(完)

© 著作权归作者所有

水牛叔叔

水牛叔叔

粉丝 143
博文 80
码字总数 36149
作品 2
珠海
程序员
私信 提问
加载中

评论(2)

水牛叔叔
水牛叔叔 博主

引用来自“现在_NOW”的评论

怎么跳转方法呢? redirect
是的,用redirect跳转
现在_NOW
现在_NOW
怎么跳转方法呢? redirect
java mvc框架--mint-mvc

mint mvc是一个纯粹的mvc框架,是在servlet之上做了浅层包装而做出来的,它做的事情很简单:接收请求->封装参数->将请求交给开发者这编写的逻辑处理->返回处理结果。 mint-mvc有如下特点: ...

水牛叔叔
2014/10/22
2.6K
0
细说vue axios登录请求拦截器

当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截。 1.安装配置...

前端攻城老湿
2018/12/06
0
0
不起作用的一个解决方法

拦截器配置1: <mvc:annotation-driven /> 在另外的文件(非xxx-servlet.xml)中配置 mvc:interceptors mvc:interceptor <!-- 匹配的是url路径, 如果不配置或/,将拦截所有的Controller --> ......

巴顿
2016/03/15
1K
0
利用自定义注解来配合使用SpirngMVC拦截器

对于注解的使用这里就不在多介绍,直接上代码了! 先新建一个注解文件: @Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface AccessReq...

Rickxue
2016/01/19
143
0
SpringMVC拦截器简单使用

一、拦截器的配置 1、传统的配置 Xml代码 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" > <property name="interceptors"> <!-- 多个拦截......

嘻哈开发者
2015/05/23
889
0

没有更多内容

加载失败,请刷新页面

加载更多

可能是国内第一篇全面解读 Java 现状及趋势的文章

作者 | 张晓楠 Dragonwell JDK 最新版本 8.1.1-GA 发布,包括全新特性和更新! 导读:InfoQ 发布《2019 中国 Java 发展趋势报告》,反映 Java 在中国发展的独特性,同时也希望大家对 Java 有...

阿里云官方博客
22分钟前
5
0
Spring Boot 2.x基础教程:Swagger静态文档的生成

前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了。如果您还不熟悉这块,可以先阅读: Spring Boot 2.x基础教程...

程序猿DD
26分钟前
4
0
《毅力》读书笔记

1.确信你全身心地投入 2.准备好为目标进行艰难的跋涉 3.通过减少需要使用毅力的情形,为将来的挑战做好准备 4.尽可能具体细致地确定你的目标和实现目标的过程 5.把挑战分解为小而易于管理的小...

lingch
27分钟前
3
0
zk中快速选举FastLeaderElection实现

选举涉及概念 服务器状态 投票 如何选择投票? 协议 选举 如何进行选举? epoch 发送者 接收者 发送队列 接收队列 服务器状态 public enum ServerState { LOOKING,寻找Leader状态,当服务处于...

writeademo
30分钟前
3
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

Linux就该这么学
32分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部