1. 程式人生 > 實用技巧 >Spring框架——攔截器(SpringMVC)

Spring框架——攔截器(SpringMVC)

攔截器

介紹

Spring的Handler對映機制包含了Handler攔截器

使用handler攔截器,可以在某些

  • 請求應用特殊的功能
  • 檢查許可權
  • 防止表單重複提交

必須實現HandlerInterceptor介面

xml檔案配置

攔截器的配置

	<!-- 基於註解驅動的SpringMVC -->
	<mvc:annotation-driven />
	<mvc:interceptors>
		<mvc:interceptor>
                        <!-- 過濾所有的Controller -->
			<mvc:mapping path="/**"/>
                        <!-- 不過濾的Controller -->
			<mvc:exclude-mapping path="/user/login"/>
			<bean class="com.myschool.user.LoginTimeInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

Java檔案

  • 繼承HandlerInterceptorAdapter
  • 重寫方法preHandler
  • 重寫方法postHandler
  • 重寫方法afterCompletion(..)
public class LoginTimeInterceptor extends HandlerInterceptorAdapter {

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("afterCompletion");
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle");
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("preHandle");
		Calendar cal = Calendar.getInstance();
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        if (8 <= hour && hour < 17) {
            return true;
        }else{
        	response.sendRedirect("index.jsp");
			return false;
		}
//		return true;
	}

	
}

  • preHandler 在handler執行前呼叫

  • postHandler 在handler執行後呼叫

  • afterCompletion(..) 在整個請求完成後呼叫

Controller檔案

@Controller
@RequestMapping("/user")
public class UserController {
	
	@RequestMapping("/login")
	public void login(){
		
	}
	
	@RequestMapping("/list")
	public void list(){
		System.out.println("list");
	}

}