2016-10-28 149 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