SpringMVC 拦截器实现原理和登录实现

利用JQuery插件CleverTabs实现多页签打开效果 在VS中,我们能打开多页签,并在不同的页签之间进行浏览和操作,这一功能通过JQuery插件CleverTabs也能实现此效果。CleverTabs下载请点击这里:JQuery CleverTabs 本文采用ASP.NET MVC技术实现效果:要在布局页中点击不同的选择栏,根据不同的选择栏打开不同的网页链接而新增不同页签效果。首先新建一个空的MVC项目,并在_Layout布局页中引入JS... 阅读详情

SpringMVC 拦截器实现原理
在这里插入图片描述1、拦截器和过滤器针对功能来说十分相似,都起到过滤拦截的功能
2、区别:
1)拦截器是框架中的内容,过滤器是servlet的内容
2)拦截器对象可以使用框架容器管理,过滤器对象servlet容器管理
3)拦截器基于的是反射的方式,过滤器基于的是函数回调方式
4)执行的先后:请求—过滤器—拦截器—后端控制器—拦截器----过滤器----响应

springMVC拦截器的实现一般有两种方式

第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口

第二种方式是继承实现了HandlerInterceptor接口的类,比如Spring已经提供的实现了HandlerInterceptor接口的抽象类HandlerInterceptorAdapter

拦截器中重写的几个方法的执行情况

preHandle(): 这个方法在业务处理器处理请求之前被调用,SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle 方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。
postHandle():这个方法在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行。
afterCompletion():该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。

1)自定义拦截器

public class FirstInterceptor implements HandlerInterceptor {

@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
	// 实现拦截的,返回值为false不放行  ;true则放行 ---后端控制器是否被执行
	System.out.println("pre...handler");
	return true;
}


@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
		throws Exception {
	//在后端控制器的方法执行完毕,还没有返回模型和视图之前执行此方法
	//执行单元执行完毕,模型视图返回适配器之前,执行此方法
	/*
	 * 执行单元
	 * String save(){
	 * 	xxxx
	 *  xxxx
	 *  xxxx
	 *  
	 *  return "";
	 * }
	 * 
	 * */
	//此方法适用于在后端控制器送回给适配器模型和视图之前进行模型和视图的再操作
	System.out.println("post....handler");
}

@Override//相当于aop中的最终通知after
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
		throws Exception {
	// 当后端控制器中发生异常时,可以执行此方法
	// 后端控制器不发生异常,也执行此方法
	System.out.println("exception.....com");
}

}
2)配置拦截器

<mvc:interceptors>
		<!-- 可以定义多个拦截器 -->
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<bean class="com.offcn.interceptor.FirstInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

拦截器的使用案例 登录拦截

1)页面–登录页面

<form action="login" method="post">
	<p><input type="text" name="username"></p>
	<p><input type="password" name="password"></p>
	<p><input type="submit" value="登录"></p>
</form>

2)执行单元—处理登录

@RequestMapping(value="/login",method = RequestMethod.POST)
	public String login(String username,String password,HttpSession session) {
		//通过username和password进行判断---正常,说明登录成功
		//信息保存到session
		session.setAttribute("username", username);
		return "/WEB-INF/main.jsp";
	}

3)main页面

<a href="users">这个连接需要登录成功才能操作</a>

4)执行单元—处理main页面中users请求

@RequestMapping("/users")
	public String getUser() {
		return "/WEB-INF/user.jsp";
	}

此时没有添加拦截器,那么main页面中的请求无论是否登录都会实现请求的响应

5)添加拦截器

@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
		//做登录拦截的操作
		
		//获取当前请求的url
		String url = request.getRequestURI();
		url = url.substring(url.lastIndexOf("/")+1);
		if("login".equals(url)) {
			return true;
		}
		
		HttpSession session = request.getSession();
		String name = (String) session.getAttribute("username");
		if(name != null) {
			return true;
		}
		//原生态的响应操作,路径带有/,表示的是端口号位置,没有项目名
		response.sendRedirect(session.getServletContext().getContextPath()+"/index.jsp");
		return false;
	}

6)拦截器配置

<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<bean class="com.offcn.interceptor.LoginInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

此时再测试—绕过登录,先测试没有登录,直接访问main页面中的users请求,此时拦截的,所以又返回index页面;当正常登录之后users请求才会正常响应

ASP.NET中利用Application和Session统计在线人数、历史访问量 通常在整个过程中,大多数人对Application_End()这个事件的疑问是最大的,因为如果您只是在VisualStudio上做的测试的话,关闭系统时,没有触发Application_End()事件,新的数据也就没有被写入到数据库中。那么Application_End()究竟在什么时候才会被触发呢 ? 想弄明白这个问题,需要将程序发布,这里以IIS为例,用IIS发布了程序之后运行,当想要触发Application_End()事件把最新的历史访问量写入到 数据库中时,需要在IIS中关闭此程序 阅读详情

相关推荐

利用asp将数据写入到新的excel文件中

很多人都在坛子里问这个问题,因为代码比较长,很多人给出的答案都不是很完整,导致一些刚接触的人走了不少的弯路,这里总结一下生成的过程以及原理,希望能给大家一个参考和帮助1.首先生成一个excel文件,需要了解这种文件的格式,比如文件头的信息,文件体(body部分) ,文件底信息;我们可以通过这样的方式来探测一个excel文件的结构,先建立excel文件,打开后另存为网页形式,这样就获得了exce

1975

spring mvc 实现网站登录与非登录的控制

在我们的网站平台上,主要有两类页面,一类是非登录也能查看的页面,另一类是登录后才能查看的页面 通过使用 spring拦截器来实现,当用户没有登录时访问需要登录的页面时自动实现跳转至登录页 1、添加接口用于拦截器与控制器交互数据(包括上下文与登录帐号信息) View Code IWebContext /**  * 用于实现上下文连接 用于在过滤器中实现注入Reque

az44yao的专栏 1万+

ASP.NET MVC 实践之路 之十八 利用ASP.NET MVC处理文件上传与下载

利用ASP.NET MVC处理文件上传与下载文件上传与下载的操作在实际项目中经常是很重要的一个内容,在使用ASP.NET Web Form的时候我们可以使用诸多的服务器控件,FileIpload就是其中之一,但是在ASP.NET不建议使用那些服务器控件,因为那样违反三层架构原则。下面我们看看如何在ASP.NET MVC中处理文件上传与下载。首先我们创建一个名为UpAndDowmloadFiles的ASP.NET MVC Web Application。在解决方案中我们选择Controller文件夹,右键Ad

阿拉丁的专栏 8743

springboot-拦截器的实现、执行时机及原理

目录 一、登录拦截器使用 1.编写一个拦截器实现HandlerInterceptor接口 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors) 3、指定拦截规则【如果是拦截所有,静态资源也会被拦截】 二、拦截器的实现原理 1.springmvc处理逻辑参考博文 2.DispatcherServlet的doDispatch方法 3.执行拦截器的preHandle方法 4.倒叙执行所有拦截器的postHandle方法 5.页面成功渲染完成以后触发 a

秃了也弱了 2298

Win10安装和配置IIS web服务器环境来运行ASP(动态服务器页面)脚本

Win10安装和配置IIS web服务器环境来运行ASP(动态服务器页面)脚本 安装IIS 1.打开控制面板,选择【程序和功能】选项 2.选择【启用或关闭Windows功能】,为Windows开启web服务器功能 3.弹出Windows功能框中选择【Internet information Services】,点击左侧【+】号,勾选上FTP服务器,Web管理工具,点击【万维网服务】左侧【+】号,选择【应用程序开发功能】,勾选ASP和ASP.NET 3.5/4.8,或者直接像我一样全都勾选 4.然后点击【确定

qq_45722813的博客 1万+

ASP 安装教程

本文详细介绍了在Windows服务器上安装ASP的步骤。通过安装IIS、添加ASP功能、配置ASP属性,以及测试ASP安装,您可以确保ASP在您的服务器上正常运行。如果您在安装过程中遇到问题,请参考常见问题与解决方案部分。

csbysj2020的博客 919

SpringMvc简单使用——用户登录注册

SpringMvc简单使用——用户登录注册

qq_54000767的博客 5092

ASP.NET利用DOC模板导出Word

首先创建DOC模板   再次,在项目中添加该中间页面 ReportWord.aspx 重点方法: private string PrintWord() { try { string templatePath = _SaveDocPath + "/Template/RPMB.doc";

hugaozhuang的专栏 3660

SpringMVC拦截器的实现原理

一、在介绍SpringMVC拦截器前,先介绍一下SpringMVC的流程。 1.用户发送请求,经过前端控制器DispacherServlet(Controller的核心)将url交给处理器映射器HandlerMapping处理 2.处理器映射器HandlerMapping处理url,返回HandlerExecutionChain(可能包含拦截器,一定包含自定义的Controller(handler)) 3.前端控制器将Controller交给处理器适配器HandlerAdapter处理,处理完成后

u011696282的博客 1085

搭建 IIS + asp +access 网站

asp:即 Active Server Pages,是 Microsoft 公司开发的服务器端脚本环境asp:是开发 web 应用程序的一种框架asp:可以用来创建动态的交互式的网页课外扩充:在 Internet 风行的早期,浏览器中显示的网页仅是静态的图文组合而已,浏览者可以在网页上阅读信息,但无法进一步地发表意见、查询信息或进行在线购物等商务活动。为此,人们提出了动态网页或交互网页的概念和解决方案。

m0_74037729的博客 2951

Asp.net 使用页面打开个人电脑上的应用程序

最近做项目碰到要用asp.net页面来打开自己写的一个WinFrom程序。 以前做桌面程序的时候用过System.Diagnostics.Process.Start(“路径”);来打开程序,用的很流畅,效果也很多。但是这次asp.net的页面中加入上面的代码(System.Diagnostics.Process.Start(“路径”);)竟然遇到了坑: 1. 该代码在VS中调试的时候是可以打开P

yigelaoren的博客 1762

【SpringMVC】_SpringMVC实现用户登录

(1)请求方式:/user/login(2)请求方式:GET(3)接口描述:校验账号密码是否正确。

m0_63299495的博客 2463

在 ASP 中读取和显示二进制数据

概要本文介绍了如何使用 Active Server Pages(动态服务器页)读取和显示二进制数据。 许多开发人员都很欣赏从 Internet Explorer 中用 Scripting.FileSystemObject 打开 ASCII 文件然后在 Microsoft Word 或 Microsoft Excel 中显示其内容这一方式带来的方便性。但是在目前,ASP 未直接提供任何类似的对象用以

FreeXploiT 3718

aps后缀是什么文件_后缀aspx是什么文件类型?aspx文件怎么打开?

后缀为aspx的文件是一种Web文件,它包含了某网站的网页源文件。这类文件是由微软的asp.net 语言开发出来的。aspx文件怎么打开的呢?最普遍的方法就是使用记事本进行编辑了,因为aspx文件是动态文件,用户最好还是在浏览器中打开。后缀aspx是什么文件类型?asp文件是微软的在服务器端运行的动态网页文件,通过IIS解析执行后可以得到动态页面,aspx文件跟asp差不多,是微软推出的一种新的网...

weixin_39876595的博客 1147

支付对接常用:关于asp rsa加密

        asp 算是老编程语言了吧,不支持RSA加密,ASP RSA类库基本上也很少见,好些支付平台也不提供asp支付demo,一方面是没有开源的ASP RSA加密类库,一方面是这种语言太古老了有些新特性不支持。        但是有时候网站就是ASP语言开发的,不得不接入,常用的对接方式,就用asp.net或者php语言作为跳板,好些支付平台也是这样子实现的,提供asp支付demo,让的...

weixin_38895490的博客 2319

使用dreamweaver一步一步制作简单ASP留言本

 一、设计数据库ASP程序本身并不能储存数据,但是作为留言本,一些必须的信息是需要存储的,比如:留言者的姓名、联系方式、留言内容、留言时间等等。这些信息就保存在数据库中,由于留言本作为一个简单的应用,所以我们选择轻量级的access作为后台数据库。打开access 2003,新建名为data.mdb的数据库,并在其中建名为main的表,这张表主要用来存放访客的留言信息,表结构如下:

7136

TCP端口扫描的ASP实现

Author:lake2  ( http://lake2.0x54.org ) 用ASP久了,就会感到有个很郁闷的地方:ASP不像其他脚本语言那样能访问Socket。所以或许你用过PHP、Perl等实现的端口扫描器,惟独没见过ASP的。嘿嘿,所以今天本文的目的就是利用“曲线救国”的策略实现ASP端口扫描器。Only for enjoy!所谓曲线,呵呵,当然是利用其他的访问网络的组件,那

lake2的专栏 8566

机器学习——径向基函数(RBF)神经网络

目录 一、什么是基函数 二、什么是径向基函数 三、为什么RBF神经网络使用一个径向基函数作为隐含层的激活函数 四、参数训练 五、RBF网络vs BP网络和 SVM 一、什么是基函数 著名的傅里叶变换是指:n个有参(权值)的正、余弦三角函数基的和式可以等价的表示任意一个周期函数,这里的“基”和我们数学中说的坐标基或向量基含义相同,即坐标空间中任意一个向量都可以用基向量的线性和表示出来。 因此,我们引入函数空间的概念,函数空间中的每个连续函数可以表示为基函数的线性组合,就像向量空间中的每..

CHWB2580的博客 6272
上一篇: springmvc 上传和下载
下一篇: springmvc数据回显
System_sheep
博客等级 码龄8年 3粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值