1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Tentativa de criar aplicação com Spring sem arquivos de configuração XML não está dando certo

Iniciei recentemente um projeto com o framwework Spring com o objetivo de faze-lo sem usar nenhum arquivo de configuração XML, apenas código Java.

No momento, adicionei os seguintes arquivos ao meu projeto:

WebAppConfig.java

@EnableWebMvc
@ComponentScan(value="org.webapp")
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);
        registry.addResourceHandler("/css/**").addResourceLocations("/fonts/").setCachePeriod(31556926);
        registry.addResourceHandler("/img/**").addResourceLocations("/image/").setCachePeriod(31556926);
        registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

}

SecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

}

SecurityWebApplicationInitializer.java

@Order(value=2)
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

    public SecurityWebApplicationInitializer() {
        super(SecurityConfig.class);
    }
}

Nesse=a situação, quanto eu rodo a aplicação (via Eclipse), o navegador abre com a página de login padrão do Spring Security, mas após submeter o formulários com as credenciais de login, recebo um erro 404. Se eu tento digitar diretamente na barra de endereços localhost:8080/webapp1/spring/index, eu consigo visualizar a pa?ina que deveria abrir após a página de login do Spring Security.

Se eu adiciono a classe a seguir:

WebAppInitializer.java

@Order(value=1)
public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
      // Create the 'root' Spring application context
      AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
      rootContext.register(WebAppConfig.class);

      // Manage the lifecycle of the root application context
      container.addListener(new ContextLoaderListener(rootContext));

      // Create the dispatcher servlet's Spring application context
      AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
      dispatcherContext.register(DispatcherConfig.class);

      // Register and map the dispatcher servlet
      ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
      dispatcher.setLoadOnStartup(1);
      dispatcher.addMapping("/");
    }

}

Em substituição ao arquivo web.xml, conforme orientação da documentação oficial, nesse link:

http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/web/WebApplicationInitializer.html

Eu não consigo acessar nem a página de login. Mesma coisa se adiciono à SecurityConfig o metodo:

protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/css/**", "/fonts/**", "/image/**", "/js/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("spring/index").permitAll()
                .failureUrl("spring/erro_login").permitAll()
                .defaultSuccessUrl("spring/home")
                .and()
            .logout()
                .logoutSuccessUrl("spring/logout")
                .permitAll();
    }

Alguem consegue ver o que estaria faltando? Já faz um tempo que estou me batendo com esse código, e não consigo botar ele pra funcionar.

  • Essa ideia e bem bacana, porem te aconselho a primeiro configurar esse projeto com os xmls no formato padrao e depois ir passando as propriedades para o codigo java aos poucos. Eu ja fiz isso em um projeto meu, nao tive tempo de migrar toda a configuracao para o java, mas eliminei alguns xmls mas nao todos, eu fiz dessa forma q eu disse, configurei com xml tudo e depois fui fazendo aos poucos.

    LucasBrum   29 de Mar de 2014
  • Obrigado pela resposta, mas eu fiz isso. Os meus projetos anteriores todos eram baseados em XML, e agora estou passando para Java. No stackoverflow (http://stackoverflow.com/questions/22729725/why-this-spring-application-with-java-based-configuration-dont-work-properly/22734487?noredirect=1#22734487), me respoderam que estava criando dois ContextLoaderListener, um via AbstractSecurityWebApplicationInitializer e outro via WebAppInitializer. Agora estou tentando retirar um deles para que só fique um.

    Kleber Mota   29 de Mar de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do siteName!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring spring-mvc spring-security java ou faça a sua própria pergunta.