spring拦截器使用及拦截器中获取Controller实例


1,首先是配置,在spring-mvc的配置文件中加上

	<!-- 拦截器 -->  
	<mvc:interceptors>
		<bean class="cn.hydom.ztc.ztc_cp.controller.common.LoginInterceptor"/>
	</mvc:interceptors>


2,编写拦截器类

package cn.hydom.ztc.ztc_cp.controller.common;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


/**
 * @Description: 登录拦截器  继承拦截器适配器
 * @author whl
 * @date 2014-10-16 下午4:21:49
 *
 */
public class LoginInterceptor extends HandlerInterceptorAdapter {
	
	private static final Log log = LogFactory.getLog(LoginInterceptor.class);

    /** 
     * 在业务处理器处理请求之前被调用 
     * 如果返回false 
     *     从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 
     *  
     * 如果返回true 
     *    执行下一个拦截器,直到所有的拦截器都执行完毕 
     *    再执行被拦截的Controller 
     *    然后进入拦截器链, 
     *    从最后一个拦截器往回执行所有的postHandle() 
     *    接着再从最后一个拦截器往回执行所有的afterCompletion() 
     */  
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		//log.debug("--------登录拦截器执行---------");
		
		
		/**
		 * 这个主要是判断当前连接的是不是业务类的控制器,
		 * 如果是springmvc静态资源的handler,
		 * 在转成HandlerMethod时就会报错.
		 * 
		 */
		if(HandlerMethod.class.equals(handler.getClass())){
			//获取controller,判断是不是实现登录接口的控制器
			HandlerMethod method = (HandlerMethod) handler;
			Object controller = method.getBean();
			
			//判断是否为登录接口实现类
			if(controller instanceof UserLogin){
				Object user = request.getSession().getAttribute("user");
				if(user == null){
					log.debug("-----------未登录访问   跳回登录页面----");
					request.getRequestDispatcher("/home/loginUI").forward(request, response); 
					return false;   
				}
			}
		}
		
		return true;
	}



}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值