Back to Javatutorial

Spring MVC ʹHandlerInterceptor

docs/Spring全家桶/SpringMVC/SpringMVC中的拦截器.md

1.0.02.5 KB
Original Source

Spring MVC ʹHandlerInterceptor

2018-07-26 14:07

SpringĴӳư˴ҪΪض͵ӦһЩʱܺã磬ûݵȡ

<section>

ӳ䴦õʵ org.springframework.web.servletµ HandlerInterceptorӿڡӿڶ preHandle(..)ڴʵִ ֮ǰ ᱻִУ postHandle(..)ڴִ __ ԺִУ afterCompletion(..) __ ִ֮СΪ͵ǰͺṩ㹻ԡ

preHandle(..)һbooleanֵͨǷִдеIJ trueʱִУ false DispatcherServletΪѾ˶Ĵ˵ѾȾһʵͼôԼִеͲٱִˡ

ͨinterceptorsãѡм̳AbstractHandlerMappingĴӳHandlerMappingṩõĽӿڡʾ

<beans>
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="officeHoursInterceptor"/>
            </list>
        </property>
    </bean>

    <bean id="officeHoursInterceptor" class="samples.TimeBasedAccessInterceptor">
        <property name="openingTime" value="9"/>
        <property name="closingTime" value="18"/>
    </bean>
<beans>

package samples;

public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {

    private int openingTime;
    private int closingTime;

    public void setOpeningTime(int openingTime) {
        this.openingTime = openingTime;
    }

    public void setClosingTime(int closingTime) {
        this.closingTime = closingTime;
    }

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        Calendar cal = Calendar.getInstance();
        int hour = cal.get(HOUR_OF_DAY);
        if (openingTime <= hour && hour < closingTime) {
            return true;
        }
        response.sendRedirect("http://host.com/outsideOfficeHours.html");
        return false;
    }
}

Уб˴󶼻ᱻTimeBasedAccessInterceptorءǰʱڹʱ⣬ôûͻᱻضһHTMLļʾûʾֻڹʱſԷʱվ֮Ϣ

ʹRequestMappingHandlerMappingʱʵʵĴһHandlerMethodʵʶһڴĿ

SpringHandlerInterceptorAdapterü̳HandlerInterceptorӿڱøˡ

Уп󶼻ᱻõصһСصURLΧͨMVCռMVC Java̵ķʽãߣһMappedInterceptor͵beanʵ 21.16.1 MVC JavaûMVCռһСڡ

ҪעǣHandlerInterceptorĺpostHandleһע@ResponseBody``ResponseEntityķЩУHttpMessageConverter``postHandle֮ǰͰϢдӦС޷ٸıӦˣҪһӦͷ֮ġӦʵResponseBodyAdviceӿڣ䶨Ϊһ@ControllerAdvicebeanֱRequestMappingHandlerMappingá

</section>