Я разрабатываю приложение Spring, которое запускает встроенный сервер Jetty. Затем он «развертывает» веб-приложение Spring MVC на этом сервере Jetty.Embedded Jetty не распознает Spring MVC Security
Все работает хорошо с несколькими контроллерами, но я не могу добавить Spring Security в веб-приложение. Я использую программные и аннотаций на основе конфигурации и сервер Jetty настроен так:
Server server = new Server(8080);
server.setStopAtShutdown(true);
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("com.mypackage.web");
context.setParent(mainContext);
ServletContextHandler contextHandler = new ServletContextHandler();
contextHandler.setErrorHandler(null);
contextHandler.setContextPath("/");
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
DefaultServlet staticServlet = new DefaultServlet();
contextHandler.addServlet(new ServletHolder(dispatcherServlet), "/");
contextHandler.addServlet(new ServletHolder("staticServlet", staticServlet), "/res");
contextHandler.addEventListener(new ContextLoaderListener(context));
contextHandler.setResourceBase("webapp");
server.setHandler(contextHandler);
Я также создал класс com.mypackage.web.SecurityConfig, который расширяет WebSecurityConfigurerAdapter
и переопределяет метод настройки, как так:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.httpBasic();
}
}
Насколько я понимаю документацию, этого должно быть достаточно, чтобы «заблокировать» мое приложение. Когда я запускаю приложение в режиме отладки, точка останова попадает в метод configure, поэтому Spring, похоже, обнаруживает класс конфигурации.
Однако я все еще могу получить доступ к любой странице в своем приложении, не перенаправляясь к форме входа по умолчанию.
Нужно ли мне сообщать контейнеру Jetty Servlet об этой конфигурации, или я пропускаю что-то еще?
Это сообщение спасло мою жизнь, но я tryto улучшить, предлагая использовать AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME вместо «springSecurityFilterChain» закодированного строки – Whimusical
Чтобы включить сеансы, 'новый ServletContextHandler (ServletContextHandler.SESSIONS)' работает для меня. – approxiblue