内容简介:SpringMVC拦截器
java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截,然后再之前或者之后加入某些操作。
拦截器代码
java部分
public class HandlerInterceptorAdapter implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception{
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception{
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception{
}
}
spring-MVC配置部分
<!--配置拦截器, 多个拦截器,顺序执行 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
<mvc:mapping path="/ps/**" />
<!--<mvc:mapping path="/user/**" />-->
<!--<mvc:mapping path="/test/**" />-->
<bean class="com.weixin.InterceptorAdapter.HandlerInterceptorAdapter"></bean>
</mvc:interceptor>
<!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>
拦截器用法
接口源码
//继承spring的拦截接口,实现以下三个方法
public interface HandlerInterceptor {
// 在业务处理器处理请求之前被调用
boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;
// 在业务处理器处理请求完成之后,生成视图之前执行
void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;
// 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源,日志打印
void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;
}
preHandle详解
preHandle 方法有三个参数,分别是HttpServletRequest HttpServletResponse Object 传参: - HttpServletRequest 控制程序在业务处理器前的请求参数 - HttpServletResponse 控制程序在经过处理器后的返回参数 - Object 被拦截的请求Action的实体 返回值: - true表示继续流程 - false表示流程中断,不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应
实例:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
//计算出服务器当前时间
Long timeNowForServer=new Date().getTime();
//获取从前端接口请求的参数
if(null!=request.getParameter("token")){
//因为前端请求做了加密,所以这里需要对应的解密过程
String token=EncryptUtil.aesDecrypt(request.getParameter("token"),"0000000000000000");
if(null!=token) {
Long timeNowForClient = Long.parseLong(token);
//如果请求接口在五秒内
Long timeMinus = timeNowForServer - timeNowForClient;
if (-50000 <= timeMinus && timeMinus <= 50000) {
//继续接口流程
return true;
} else {
//返回相应的HTTP状态码,达到拦截的效果
//response.sendError(http状态码,页面显示的拦截原因);
response.sendError(405, "Parameters illegal");
//打回这次操作,返回相应的response
return false;
}
}else{
response.sendError(405, "Parameters illegal");
return false;
}
//或者请求地址中含有getUserInfo就放开对这个请求的拦截,等于白名单的效果
}else if(request.getRequestURI().indexOf("getUserInfo")>0){
return true;
}else{
//跳转到其他页面
response.sendRedirect(request.getContextPath() + "/Login1.html");
return false;
}
}
状态码可参照HTTP状态码大全
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 前端架构之vue+axios 前端实现登录拦截(路由拦截、http拦截)
- react离开页面,自定义弹框拦截,路由拦截
- Springboot整合Hibernate拦截器时无法向拦截器注入Bean
- 基于原生fetch封装一个带有拦截器功能的fetch,类似axios的拦截器
- IOS 拦截器
- angular 拦截器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Intersectional Internet
Safiya Umoja Noble、Brendesha M. Tynes / Peter Lang Publishing / 2016
From race, sex, class, and culture, the multidisciplinary field of Internet studies needs theoretical and methodological approaches that allow us to question the organization of social relations that ......一起来看看 《The Intersectional Internet》 这本书的介绍吧!