возникли проблемы с получением весенней безопасности для перехвата запросов

После поиска вокруг и просмотра множества других примеров я не могу заставить 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"}. (Я понимаю, что не указал поставщика аутентификации, но по крайней мере ожидаю ошибки.)

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


person end-user    schedule 15.01.2015    source источник


Ответы (1)


п/м - я понял.

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

    FilterRegistration.Dynamic security =
            servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy());
    security.addMappingForUrlPatterns(dispatcherTypes, true, "/*");
person end-user    schedule 16.01.2015