2015-01-15 3 views
0

После поиска по всему миру и просмотра множества других примеров, я не могу заставить Spring перехватывать запросы. Я не должен что-то правильно настраивать, или мои ожидания ошибочны. Может ли кто-нибудь сказать мне, что я делаю неправильно?, столкнувшись с проблемой получения весенней безопасности для перехвата запросов

Это устанавливает аннотацию конфигурации

public class WebMVCApplicationInitializer implements WebApplicationInitializer 
{ 
    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException 
    { 
     WebApplicationContext context = getContext(); 
     servletContext.addListener(new ContextLoaderListener(context)); 
     ServletRegistration.Dynamic dispatcher = 
       servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/*"); 
    } 

    private AnnotationConfigWebApplicationContext getContext() 
    { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocation(String.valueOf(this.getClass().getPackage())); 
     return context; 
    } 
} 

Мой WebMvcConfig - определяет, какой пакет, чтобы найти аннотированные контроллеры

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "myproject.controller") 
public class WebMvcConfig extends WebMvcConfigurerAdapter 
{ 

} 

Мои SecurityConfig - должны соответствовать и требуют проверки подлинности на все

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter 
{ 

    @Override 
    protected void configure(HttpSecurity http) throws Exception 
    { 
     // @formatter:off 
     http 
      .authorizeRequests() 
       .anyRequest().authenticated(); 
     // @formatter:on 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
    { 
     auth 
      .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER"); 
    } 
} 

, наконец, мой контроллер - просто дает тривиальный ответ для теста ING

@RestController 
public class SessionController 
{ 
    @ResponseBody 
    @RequestMapping(value = "echo", method = RequestMethod.GET) 
    public Map<String, Object> testResponse() 
    { 
     Map<String, Object> modelMap = new HashMap<String, Object>(); 
     modelMap.put("data", "test for echo"); 
     return modelMap; 
    } 
} 

Теперь, мое ожидание, что когда я запускаю это, и указать браузер для/эхо, он должен требовать аутентификации, или ошибка, или что-то. Вместо этого я просто получаю {"data":"test for echo"}. (Я признаю, что я не указал поставщика проверки подлинности, но по крайней мере ожидал ошибку.)

Что мне не хватает?

ответ

0

n/m - Я понял.

Мне нужно было добавить цепочку фильтров безопасности в контекст приложения.

FilterRegistration.Dynamic security = 
      servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy()); 
    security.addMappingForUrlPatterns(dispatcherTypes, true, "/*");