自定义拦截器实现简单登录拦截的步骤

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
		
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41950069/article/details/81253376