java SpringMVC的拦截器配置
java后台经常会使用拦截器功能拦截前端访问的请求,是否是
登录状态,是否有权限。
实现方法:
1.配置SpringMVC 的xml文件:
<!--配置拦截器, 多个拦截器,顺序执行 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
<mvc:mapping path="/**" />
<!--<mvc:mapping path="/" />-->
<!--<mvc:mapping path="/user/**" />-->
<!--<mvc:mapping path="/login/**" />-->
<bean class="com.relaxPalace.web.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
<!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>
2.编写拦截器类:
CommonInterceptor.java:
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by Administrator on 2017/7/3.
*/
public class CommonInterceptor implements HandlerInterceptor {
/**
* 在请求处理之前执行,该方法主要是用于准备资源数据的,然后可以把它们当做请求属性放到WebRequest中
*/
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
// TODO Auto-generated method stub
System.out.println("AllInterceptor...............................");
httpServletRequest.setAttribute("request", WebRequest.SCOPE_REQUEST);//这个是放到request范围内的,所以只能在当前请求中的request中获取到
httpServletRequest.setAttribute("session", WebRequest.SCOPE_SESSION);//这个是放到session范围内的,如果环境允许的话它只能在局部的隔离的会话中访问,否则就是在普通的当前会话中可以访问
httpServletRequest.setAttribute("globalSession", WebRequest.SCOPE_GLOBAL_SESSION);//如果环境允许的话,它能在全局共享的会话中访问,否则就是在普通的当前会话中访问
//判断是否登录,如果已登录retrun false拦截,如果未登录return true不拦截
return true;
}
/**
* 该方法将在Controller执行之后,返回视图之前执行,ModelMap表示请求Controller处理之后返回的Model对象,所以可以在
* 这个方法中修改ModelMap的属性,从而达到改变返回的模型的效果。
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println( "postHandle-=-=--=--=-=-=-=-=-=-=-=-==-=--=-=-=-=");
}
/**
* 该方法将在整个请求完成之后,也就是说在视图渲染之后进行调用,主要用于进行一些资源的释放
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println(e + "afterCompletion-=-=--=--=-=-=-=-=-=-=-=-==-=--=-=-=-=");
}
}
配置好启动程序后:
访问url链接:http://localhost:8080/user/getAllusers
后台会打印:
AllInterceptor...............................
postHandle-=-=--=--=-=-=-=-=-=-=-=-==-=--=-=-=-=
nullafterCompletion-=-=--=--=-=-=-=-=-=-=-=-==-=--=-=-=-=