2016-10-28 1 views
0

/api /로 시작하는 RESTFul API URL에 하나의 HttpSecurity 인스턴스가 있고 폼 기반 로그인에 하나씩 있습니다. 또한 정상적인 요청에 대해 2 개의 디스패처 하나를, 나머지 API 호출에 대해 다른 하나를 가지고 있습니다. 하지만 두 개가 필요한가요?여러 개의 디스패처 서블릿을 사용하는 Spring Multiple HttpSecurity

@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/cm/dealer/findByDealerStatus 
/cm/dealer/findByDealerStatus 

가 난 단지 하나의 기본 디스패처를 가지고 @RequestMapping ("/ API/cm/대리점") 내 REST 컨트롤러에 주석을해야// API와 하나가 액세스 할 수 만 원하는 올바른 것입니다 방법? 또는 올바른 방법은 무엇입니까?

답변

0

두 개의 별도 서블릿을 추가해야합니다. 이제는 단일 디스패처 서블릿 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

이이에게 전화를 보장합니까 확장/cm findByDealerStatus 내 REST 컨트롤러에 사용할 수 없습니다// 대리점에? – Mukun