其他分享
首页 > 其他分享> > 关于自定义拦截器与annotation-driven冲突的问题解决

关于自定义拦截器与annotation-driven冲突的问题解决

作者:互联网

关于自定义拦截器与annotation-driven冲突的问题解决

今天在想做一个spring的拦截器,却一直没有起作用,在网上看了一下,原来是说因为annotation-driven会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 导致interceptor失效。
网上的方法大多是要二者取其一,可我不能把注解驱动删了,就偶尔试到了一个解决办法。

这里写了一个自定义的拦截器,这个@Component的注解就是问题解决的关键

package com.hsd.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component   <!--帮助扫描到这拦截器文件
public class LoginInterceptor implements HandlerInterceptor{
	
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{
	    HttpSession session = request.getSession();
		Object userId =  session.getAttribute("userId");
		Object userName = session.getAttribute("userName");
		if(userId == null || userName == null){
			System.out.println("当前用户没有登录");
			response.sendRedirect(request.getContextPath()+"/login/index");
 			return false;
		}
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		
	}
}

下面是拦截器的配置文件,把拦截器紧挨着扫描注解写吧,我之前放在文件最底部就没有用。

 <mvc:annotation-driven enable-matrix-variables="true">  </mvc:annotation-driven>	
    <mvc:default-servlet-handler/>  	
    <context:component-scan base-package="com.hsd.controller"></context:component-scan>
   
   <!-- 自定义拦截器 -->
    <mvc:interceptors>  
     <mvc:interceptor>  
        <mvc:mapping path="/login/*" />  
        <mvc:exclude-mapping path="/login/index" />
        <bean class="com.hsd.interceptor.LoginInterceptor" />  
     </mvc:interceptor>  
    </mvc:interceptors> 
   

没怎么做过项目,下午把一些网上的看到的方法试了一下没有效果,就自己胡乱试了很多,不是很懂为什么可以运行了,个人理解应该是annotation-driven扫描注解的时候,把拦截器也给扫描了,总之拦截未登录的用户的目的达到了。

标签:拦截器,自定义,driven,注解,import,servlet,annotation
来源: https://blog.csdn.net/weixin_44261745/article/details/104847668