«Не найден WebApplicationContext: не зарегистрирован ContextLoaderListener или DispatcherServlet» После добавления защиты Spring 5 на существующую пружину mvc - PullRequest
0 голосов
/ 29 апреля 2020

Я выполнил все шаги, упомянутые весной, выполните 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];
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...