Spring 4.x Конфигурация на основе Java-кода: файлы статических ресурсов и сервлет Dispatcher [дубликаты]

На этот вопрос уже есть ответ здесь:

Замена конфигурации аннотации для mvc: resources - Spring 2 ответа

До версии 3.0 сервлета все настройки основаны на xml. В настоящее время я использую конфигурацию на основе кода / аннотации.

В конфигурации стиля XML мы имеем

<mvc:resources mapping="/res/**" location="/res/" />

Как я могу перевести его в конфигурацию на основе кода? Я продолжаю получать сообщение об ошибке от консоли отладки eclipse, что не найден диспетчерский сервлет для файла ресурсов.

Кстати, вот моя ссылка,Миграция с Spring Security 3.x на 4.x (конфигурация Java)

инициализатор

public class AppInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { SecurityConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { MvcConfig.class };
    }

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

Конфигурация MVC

@EnableWebMvc
@ComponentScan({ "com.appname.controller" })
public class MvcConfig {
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

конфигурация безопасности

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password")
                .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/res/**").permitAll()
            .and().authorizeRequests()
            .anyRequest().hasRole("USER")
            .and().formLogin().loginPage("/account/signin").permitAll()
            .and().logout().permitAll();
    }
}

инициализатор безопасности

public class SecurityInitializer extends
        AbstractSecurityWebApplicationInitializer {

}

пользовательский логин

public class CustomUserDetailsService implements UserDetailsService {

    private AccountRepository accountRepository;

    public CustomUserDetailsService() {
        this.accountRepository = new AccountRepository();
    }

    @Override
    public UserDetails loadUserByUsername(String email)
            throws UsernameNotFoundException {

        Account account = accountRepository.getAccountByEmail(email);

        if (account == null) {
            throw new UsernameNotFoundException("Invalid email/password.");
        }

        Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
        authorities.add(new SimpleGrantedAuthority("USER"));

        return new User(account.getEmail(), account.getPassword(), authorities);
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос