2016-10-28 121 views
0

我有多個HttpSecurity實例,一個用於RESTFul API,以/ api /開頭,另一個用於基於表單的登錄。我也有2個調度員一個爲正常請求和其他休息API調用。但是我需要兩個?Spring Multiple Multiple HttpSecurity with Multiple Dispatcher servlets

@Bean 
    public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) { 
     ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet); 
     registration.addUrlMappings("/api/*", "/"); 
     return registration; 
    } 

我的REST控制器

@RestController 
@RequestMapping("/cm/dealer") 
public class DealerController { 
    @Autowired 
    DealerMgmt dealerMgmt; 

    @RequestMapping(value = "/findByDealerStatus", method = RequestMethod.GET) 
    public Page<Dealer> findByDealerStatus(@RequestParam int page, @RequestParam("dealerStatus") String dealerStatus) {   
     Page<Dealer> dealers = dealerMgmt.isEditable(dealerMgmt.findByDealerStatus(page, dealerStatus)); 
     return dealers; 
    } 
} 

但這REST控制器是由兩個調度員訪問。但我想只有由一個與/ API訪問/

/api/cm/dealer/findByDealerStatus 
/cm/dealer/findByDealerStatus 

我應該只有一個默認的調度和批註我的REST控制器@RequestMapping(「/ API /平方釐米/經銷商」)是正確的辦法 ?或者什麼是正確的做法。

回答

0

您將不得不添加兩個單獨的servlet,現在您已映射單個調度程序servlet 2路徑映射。

擴展AbstractAnnotationConfigDispatcherServletInitializer

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException 

    .. 

    ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
    "dispatcher", 
    new DispatcherServlet(dispatcherContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/"); 

    ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
    "apidispatcher", 
    new DispatcherServlet(dispatcherContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/api"); 

// 
} 

} 

@Bean 
    public ServletRegistrationBean apiDispather() { 
     DispatcherServlet dispatcherServlet = new DispatcherServlet(); 

     AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); 
     applicationContext.register(ResourceConfig.class); 
     dispatcherServlet.setApplicationContext(applicationContext); 

     ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet, "/api/"); 
     servletRegistrationBean.setName("apiDispather"); 
     return servletRegistrationBean; 
    } 

@Bean 
    public ServletRegistrationBean dispather() { 
     DispatcherServlet dispatcherServlet = new DispatcherServlet(); 

     AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); 
     applicationContext.register(WebConfig.class); 
     dispatcherServlet.setApplicationContext(applicationContext); 

     ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet, "/"); 
     servletRegistrationBean.setName("dispather"); 
     return servletRegistrationBean; 
    } 
+0

這是否確保通話/平方釐米/經銷商/ findByDealerStatus不允許我的REST控制器? – Mukun