1. 首先创建一个类MyInterceptor 实现这个HandlerInterceptor接口:org.springframework.web.servlet.HandlerInterceptor
重写其三个方法prehandle在进入controller的方法执行之前 posthandle执行的方法执行完成之后 和aftercomplate方法最终向前台页面跳转之前
2.然后根据request.getRequestURI()这个方法判断请求的路径是否是跟登录有关的路径,如果是则放过,
如果不是通过HttpSession session = request.getSession();获得session,通过session获得登录对象,看看是否有登录信息
如果有登录信息,说明用户登录过,直接放过请求就行了
如果没有登录信息,直接跳转到登录页面让用户登录
3.写完自己的拦截器之后再springmvc中配置自己的拦截器
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有请求 -->
<mvc:mapping path="/**"/>
<bean name="my1" class="www.lj.com.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
4.同时需要注意的是前台css和jquery的文件也会拦截,所以还需要配置让spring加载css和jquery的资源,尽量放在拦截器的配置上面
<mvc:resources location="/static/" mapping="/static/**" />
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
5.运行测试。
public class MyInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
if(request.getRequestURI().endsWith("login")||request.getRequestURI().endsWith("register")){
return true;
}else{
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user!=null){
return true;
}else{
request.setAttribute("error", "请先登录!");
request.getRequestDispatcher("../index.jsp").forward(request,response);
return false;
}
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
}