2017-01-22 153 views
0

我知道這已被問了很多次,但沒有一個能夠讓我的代碼工作。我可能做錯了什麼,但我找不到什麼。春季截取不起作用

我正在使用AngularJS的Spring Boot,我試圖做的是預處理所有的請求。

這是我的代碼:

控制器:

@RestController 
@RequestMapping(value = { "/user" }) 
public class UserController { 

    @RequestMapping(value = "/get", method = RequestMethod.GET) 
    public String getLanguage() { 
     return "user"; 
    } 
} 

攔截:

@Component 
public class RequestHandler extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { 
     System.out.println("intercepted"); 
     return false; 
    } 
} 

WebConfig:

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    HandlerInterceptor requestHandler; 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(requestHandler); 
    } 
} 

而且我將此添加到applicationContext.xml中:

<mvc:interceptors> 
    <bean class="server.RequestHandler" /> 
</mvc:interceptors> 

我一直在週末試圖做這項工作,我不能,任何幫助將非常感激!

謝謝!

+0

你試過注入RequestHandler而不是一般的HandlerInterceptor。或者用registry.addInterceptor(new RequestHandler())註冊你的攔截器? – Nathanael

+0

我已經嘗試過,但它仍然無法工作。 – Motomine

+0

爲什麼你有用於設置Spring MVC的xml和java配置......這是等待發生的麻煩......也沒有'@ EnableWebMvc'或''那些配置不是如果你手動配置'HandlerAdapter'和/或'HandlerMapping',情況同樣適用。 –

回答

0

你可以嘗試手動定義Bean不聲明Interceptor作爲@Component這樣的:

RequestHandler.java

public class RequestHandler extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws ServletException { 
     System.out.println("intercepted"); 
     return true; 
    } 
} 

WebConfig.java

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public RequestHandler requestHandler() { 
     return new RequestHandler(); 
    } 

    @Override 
    public void addInterceptors(final InterceptorRegistry registry) { 
     registry.addInterceptor(requestHandler()); 
    } 
} 

順便說一句:如果該類聲明爲攔截器,爲什麼不重命名爲包含術語的攔截器,如RequestInterceptor

它應該直接工作。請讓我知道,如果這爲你做了詭計!

更新:我已經實現了這個原型。看到這個最小的,完整的,可驗證的例子。希望能幫助到你! https://github.com/dbubenheim/stackoverflow-41794738.git

+0

我試過,但說它可以在那裏創建一個bean。我不知道我還能做什麼,因爲我嘗試了很多東西。我可以在web.xml中設置一些東西嗎?因爲我是空的,所以我試圖在那裏設置servlet映射,但它說它可以被聲明或類似的東西。 – Motomine

+0

我已更新我的答案並添加了一個最簡單的示例。也許你有時間去驗證它是否適合你。 –

+0

另外我不得不提到'preHandle'方法的返回值應該是'true',以便完成請求處理程序鏈並訪問您的控制器方法。請看看這個以及@Motomine –