自定义拦截器类(实现HandlerInterceptorAdapter接口)
public class Intercepter extends HandlerInterceptorAdapter{
//不拦截的页面
private static final String[] IGNORE_URI={"/adminPage","/uploadPage"};
/**
* 请求之后执行,用于清理资源
* 在Interceptor的preHandle返回为true时执行
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
System.out.println("after");
}
/**
* Controller调用之后执行,可对ModelAndView操作
* 当Interceptor的preHandle返回为true时执行
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("post");
}
/**
* preHandle拦截使用,在controller执行之前
* 返回值为true才会向下执行,false的话请求就结束
*/
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
// TODO Auto-generated method stub
boolean flag=false; //用于存储判断登录的结果
//获取请求路径
String servletPath=request.getServletPath();
//判断请求是否需要拦截
for(String s:IGNORE_URI){
if(servletPath.contains(s)){
flag=true; //如果是不拦截的网站,flag为true,跳出循环,转向下个方法
break;
}
}
//拦截请求
if(!flag){ //如果是非公开的页面↓
Admin admin=(Admin)request.getSession().getAttribute("ADMIN");
if(admin==null){
System.out.println("AuthorizationInterceptor拦截请求");
request.setAttribute("message", "请先登录管理员后再访问网站");
request.getRequestDispatcher("/error.jsp").forward(request, response);
}else{
//用户登陆过,验证通过,放行
System.out.println("AuthorizationInterceptor放行请求");
flag=true;
}
}
return flag;
}
}
在spring mvc中配置自定义拦截器
<!-- 不拦截静态请求 -->
<mvc:default-servlet-handler />
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!--表示拦截所有请求-->
<mvc:mapping path="/**"/>
<!--自定义的拦截器类-->
<bean class="com.entor.intercepter.Intercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>