DispatcherServlet не может получить классы конфигурации - PullRequest
0 голосов
/ 24 октября 2019

сегодня я хочу попробовать java и начать работать с Spring MVC (базовым). У меня проблема при попытке запустить мой src с Jetty (v9.4.21.v20190926). Я не знаю, почему DispatcherServlet не может загрузить классы конфигурации.

У меня есть некоторые исследования, я пытаюсь решить, но ничего не происходит :( getServletConfigClasses () vs getRootConfigClasses () при расширении AbstractAnnotationConfigDispatcherServletInitializer

У меня есть файл конфигурации ниже: ServletInitializer.java

package com.examples.spring.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Configuration
public class ServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{ SecurityConfig.class, WebConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

WebConfig.java

package com.examples.spring.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.examples.spring"})
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public FreeMarkerViewResolver freemarkerViewResolver() {

        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setCache(true);
        resolver.setSuffix(".ftl");
        return resolver;
    }

    @Bean
    public FreeMarkerConfigurer freemarkerConfig() {

        FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
        freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/ftl/");
        return freeMarkerConfigurer;
    }
}

SecurityConfig.java

package com.examples.spring.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // http.csrf().disable();

        http.authorizeRequests()
            // Config Non-Authenticated Path
            .antMatchers("/").permitAll()
            .antMatchers("/login").permitAll()
            .antMatchers("/registration").permitAll()

            // Config Authenticated Path
            .antMatchers("/admin/**").hasAuthority("ADMIN").anyRequest()
            .authenticated().and().formLogin()

            // Config Login Success & Failed Redirect
            .failureUrl("/login?error=true")
            .defaultSuccessUrl("/admin")

            // Config Access Denied Path
            .and().exceptionHandling()
            .accessDeniedPage("/access-denied")

            // Config Login Path
            // .loginPage("/login")
            // .usernameParameter("email")
            // .passwordParameter("password")

            // Config Logout Path
            .and().logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .deleteCookies("JSESSIONID")
            .logoutSuccessUrl("/");
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Я не вижу проблемы с моими файлами, но SecurityConfig.class не может загрузиться, когда я запускаю проект с Jetty, Spring Boot мой кодсработало без проблем :(. Я просто посвежее, пожалуйста, объясните мне проблему, спасибо.

...