После поиска вокруг и просмотра множества других примеров я не могу заставить 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;
}
}
My WebMvcConfig — указывает, в каком пакете искать аннотированные контроллеры.
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "myproject.controller")
public class WebMvcConfig extends WebMvcConfigurerAdapter
{
}
My 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");
}
}
наконец, мой контроллер - просто дает тривиальный ответ для тестирования
@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;
}
}
Теперь я ожидаю, что когда я запускаю это и указываю браузеру на /echo, требуется аутентификация, ошибка или что-то в этом роде. Вместо этого я просто получаю {"data":"test for echo"}
. (Я понимаю, что не указал поставщика аутентификации, но по крайней мере ожидаю ошибки.)
Что мне не хватает?