Защита пружины для приложения без пружинной загрузки не работает

#spring-security #spring-4

Вопрос:

Я пытался включить базовую аутентификацию для своих конечных точек весной 4. Но, похоже, это ничего не дает.

Есть идеи?

Если я поставлю точку останова, я смогу увидеть, что метод configure вызывается только при запуске сервера.

 package org.example;  import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  @RestController @Validated public class MyController {  @RequestMapping(value = "/health")  public String health() {  return "OK";  }  @RequestMapping(value = "/getdata")  public String getData() {  return "data";  } }   
 package org.example;  import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;   @EnableWebSecurity public class BasicAuthConfig extends WebSecurityConfigurerAdapter {   // Authentication : User --gt; Roles  @Override  protected void configure(AuthenticationManagerBuilder auth)  throws Exception {  auth.inMemoryAuthentication()  .withUser("appuser")  .password("{noop}apipassword")  .roles("USER");  }  @Override  protected void configure(HttpSecurity http) throws Exception {  http  //HTTP Basic authentication  .httpBasic()  .and()  .authorizeRequests()  .antMatchers(HttpMethod.GET, "/rest/**").hasRole("USER")  .antMatchers(HttpMethod.POST, "/cxf/**").hasRole("USER")  .and()  .csrf().disable()  .formLogin().disable();  } }   

Мой web.xml

  lt;!DOCTYPE web-app PUBLIC  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd" gt;  lt;web-appgt;  lt;display-namegt;Archetype Created Web Applicationlt;/display-namegt;   lt;context-paramgt;  lt;param-namegt;contextConfigLocationlt;/param-namegt;  lt;param-valuegt;/WEB-INF/applicationContext.xmllt;/param-valuegt;  lt;/context-paramgt;  lt;listenergt;  lt;listener-classgt;org.springframework.web.context.ContextLoaderListenerlt;/listener-classgt;  lt;/listenergt;  lt;servletgt;  lt;servlet-namegt;cxflt;/servlet-namegt;  lt;display-namegt;CXF Servletlt;/display-namegt;  lt;servlet-classgt;org.apache.cxf.transport.servlet.CXFServletlt;/servlet-classgt;  lt;load-on-startupgt;101lt;/load-on-startupgt;  lt;init-paramgt;  lt;param-namegt;use-x-forwarded-headerslt;/param-namegt;  lt;param-valuegt;truelt;/param-valuegt;  lt;/init-paramgt;  lt;/servletgt;  lt;servletgt;  lt;servlet-namegt;restlt;/servlet-namegt;  lt;servlet-classgt;org.springframework.web.servlet.DispatcherServletlt;/servlet-classgt;  lt;load-on-startupgt;103lt;/load-on-startupgt;  lt;/servletgt;   lt;servlet-mappinggt;  lt;servlet-namegt;restlt;/servlet-namegt;  lt;url-patterngt;/rest/*lt;/url-patterngt;  lt;/servlet-mappinggt;  lt;servlet-mappinggt;  lt;servlet-namegt;cxflt;/servlet-namegt;  lt;url-patterngt;/cxf/*lt;/url-patterngt;  lt;/servlet-mappinggt; lt;/web-appgt;     

http://localhost:8080/TestWeb3/rest/health по — прежнему доступен без аутентификации

Ответ №1:

Оказывается, мне нужно подключить фильтр безопасности в web.xml следующим образом

 lt;!-- Spring Security --gt;  lt;filtergt;  lt;filter-namegt;springSecurityFilterChainlt;/filter-namegt;  lt;filter-classgt;org.springframework.web.filter.DelegatingFilterProxylt;/filter-classgt;  lt;/filtergt;  lt;filter-mappinggt;  lt;filter-namegt;springSecurityFilterChainlt;/filter-namegt;  lt;url-patterngt;/*lt;/url-patterngt;  lt;/filter-mappinggt;