Spring MVC INterceptor未被调用

时间:2016-12-15 09:02:49

标签: java spring spring-mvc interceptor

我正在编写测试以检查spring MVC拦截器的工作情况。 我有我的工作控制器,我已经介绍了拦截器代码。 一切都工作正常,除了拦截器没有被执行。 没有错误。

拦截器:

package com.neha.javabrains;

import java.util.Calendar;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

@Component
public class TimeBasedInterceptor extends HandlerInterceptorAdapter{

    private int openingTime=9;
    private int closingTime=18;
    public int getOpeningTime() {
        return openingTime;
    }
    public void setOpeningTime(int openingTime) {
        this.openingTime = openingTime;
    }
    public int getClosingTime() {
        return closingTime;
    }
    public void setClosingTime(int closingTime) {
        this.closingTime = closingTime;
    }

    public boolean preHandle(HttpServletRequest httpRequest,HttpServletResponse httpResponse) throws Exception
    {
        System.out.println("here in interceptor");
        Calendar cal=Calendar.getInstance();
        int hour=cal.HOUR_OF_DAY;
        if(openingTime<=hour && hour<closingTime)
        {
            return true;
        }
        httpResponse.sendRedirect("http://localhost:8080/SpringWebProject/outsideHours.html");
        return false;   
    }
}

应用程序上下文条目:

<context:component-scan base-package="com.neha.javabrains" />
<context:annotation-config/>  
<mvc:annotation-driven /> 
<mvc:default-servlet-handler />

<mvc:resources mapping="/resources/**" location="/resources/" />
<tx:annotation-driven transaction-manager="txManager"/>
<aop:aspectj-autoproxy />

  <mvc:interceptors>

     <bean class="com.neha.javabrains.TimeBasedInterceptor">
     </bean>

  </mvc:interceptors>

控制器:

package com.neha.javabrains;

import java.util.Locale;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.context.MessageSource;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class LoginController {

public LoginService loginService;

@Autowired
@Qualifier("loginFormValidator")    
public Validator validator;
@Autowired
public MessageSource messageSource;

@InitBinder
private void initBinder(WebDataBinder binder) {
    binder.setValidator(validator);
}

@Autowired
private Environment environment;

@RequestMapping("/")    
public String doLogin(ModelMap modelMap)
{
    System.out.println("doLogin" +loginService);

    String message=messageSource.getMessage("message", null, "default", Locale.UK);
    System.out.println("Message is:" + message);
    LoginForm loginForm=new LoginForm();
    modelMap.put("loginForm",loginForm);
    return "login";
}

public void printData()
{
    System.out.println("just to test aspect programming");
}

@RequestMapping("/login")   
public String verifyLogin(@Valid @ModelAttribute("loginForm") LoginForm loginForm,BindingResult bindingResult)
{
    if(bindingResult.hasErrors())
    {
        System.out.println("here in error" + bindingResult.getAllErrors().get(0));
        return "login";
    }
    loginService.verifyLogin(loginForm);
    LoginForm loginFrm=new LoginForm();
    loginFrm.setUsername(loginForm.getUsername());
    loginFrm.setPassword(loginForm.getPassword());
    ModelAndView mav=new ModelAndView();
    mav.addObject("loginForm", loginFrm);
    return "result";
}

@RequestMapping("/addUser") 
public String addUser(@ModelAttribute("LoginForm") LoginForm loginForm,LoginForm loginFrm)
{
    System.out.println("In add User");
    loginService.addUser(loginForm);
    loginFrm.setUsername(loginForm.getUsername());
    loginFrm.setPassword(loginForm.getPassword());
    ModelAndView mav=new ModelAndView();
    mav.addObject("LoginForm", loginFrm);
    return "result";
}

public LoginService getLoginService() {
    return loginService;
}
@Autowired
@Required
public void setLoginService(LoginService loginService) {
    this.loginService = loginService;
    System.out.println("i was called" + loginService);

}

public Environment getEnvironment() {
    return environment;
}

public void setEnvironment(Environment environment) {
    this.environment = environment;
}

public MessageSource getMessageSource() {
    return messageSource;
}

public void setMessageSource(MessageSource messageSource) {
    this.messageSource = messageSource;
}



}

Web.xml条目是:

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>

    <servlet-name>Neha</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext*.xml</param-value>
        </init-param>
       <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>Neha</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
    </context-param>
    <listener>  
   <listener-class>
       org.springframework.web.context.ContextLoaderListener
   </listener-class>
  </listener>
</web-app>

任何人都可以帮忙.....

1 个答案:

答案 0 :(得分:0)

您似乎错过了要应用拦截器的路径。

试试这个

<mvc:interceptors>
   <mvc:interceptor>
       <mvc:mapping path="/**" /> <!-- Specify here what all path you want to intercept -->
       <bean class="com.neha.javabrains.TimeBasedInterceptor" />
   </mvc:interceptor>
</mvc:interceptors>

希望这有帮助。