Я выполнил все шаги, упомянутые весной, выполните c для добавления защиты пружины к существующему проекту mvc.
https://docs.spring.io/spring-security/site/docs/5.3.1.RELEASE/reference/html5/#abstractsecuritywebapplicationinitializer -с пружиной- mvc
Как только я выполняю все остальные операции, я получаю вышеупомянутую ошибку. При отладке во время запуска сервера я заметил, что поток выполнения начинается с подкласса AbstractSecurityWebApplicationInitializer, и поток никогда не достигает моей существующей пружины mvc WebInitializer, расширяющей WebAbstractAnnotationConfigDispatcherServletInitializer.
Нужна помощь, чтобы решить эту проблему. *
Ниже приведен фрагмент кода.
Класс конфигурации безопасности
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {
private static final String API_VERSION = "/api/v2";
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("sysadm").password("test").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("API_VERSION" + "/customer" +"/**").permitAll().anyRequest().authenticated();
http.httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint())
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);//We don't need sessions to be created.
}
@Bean
public CustomBasicAuthenticationEntryPoint getBasicAuthEntryPoint(){
return new CustomBasicAuthenticationEntryPoint();
}
}
Класс точки входа
@Component
public class CustomBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint {
@Override
public void commence(
HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx)
throws IOException {
response.addHeader("WWW-Authenticate", "Basic realm=" + getRealmName() + "");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
PrintWriter writer = response.getWriter();
writer.println("HTTP Status 401 - " + authEx.getMessage());
}
@Override
public void afterPropertiesSet() {
setRealmName("MY_TEST_REALM");
super.afterPropertiesSet();
}
}
AbstractSecurityWebApplicationInitializer
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
}
AbstractAnnotationConfigDispatcherServletInitializer
@Configuration
@ComponentScan(basePackages = {
"com.se.rso.proxy.webapp"
, "com.se.rso.proxy.ctx"
, "com.se.rso.proxy.services"
,"com.se.rso.proxy.rest"
})
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
private static final Logger LOGGER = LoggerFactory.getLogger(WebInitializer.class);
WebInitializer() {
LOGGER.info("Web Initializer starting .... {}", this);
}
@Override
protected String[] getServletMappings() {
return new String[]{"/*", "/"};
}
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{CustomSecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[0];
}
}