3
respostas

Como é a forma mais recente de se configurar o Security Spring

No video está sendo mostrada um jeito antigo de se configurar o SpringSecurity, pois na Transcrição é utilizada uma versão mais recente e a tag @EnableWebMvcSecurity é substituida por @EnableWebSecurity. O problema é que se eu seguir a transcrição eu recebo o erro discutido nesse tópico: https://cursos.alura.com.br/forum/topico-spring-security-31755

Nesse tópico o autor recorre a utilizar o jeito antigo (Utilizando a versão M.0.2). Eu gostaria de saber como eu faço essa configuração utilizando as versões mais atuais e utilizando a tag @EnableWebSecurity.

E aproveitando essa duvida eu também queria dar uma sugestão. Seria bom corrigir essas divergências que existem nessa parte do curso:


Dependencias

No video ele utiliza a M.0.2

Na transcrição do video é utilizada a versão 4.1.3 (https://cursos.alura.com.br/course/springmvc-2-integracao-cache-seguranca-e-templates/task/12251)

Logo após a transcrição fala para utilizar 4.0.0.RELEASE https://cursos.alura.com.br/course/springmvc-2-integracao-cache-seguranca-e-templates/task/12252


Anotações utilizadas

No video : @EnableWebMvcSecurity

Na Transcrição: @EnableWebSecurity

3 respostas

Para usar a annotation nova tem que trocar a versão realmente. Você só precisa se preocupar em trocar a versão de todas as dependências que o security usa.. nesse caso o spring-core e mvc...

Então, eu fiz exatamente como esta na transcrição do video ( Que já está com uma versão superior a do video e utilizando a tag @EnableWebSecurity) Porém eu recebo o seguinte erro:

 Services which failed to start:      service jboss.undertow.deployment.default-server.default-host."/MoneySpring-1.0": org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host."/MoneySpring-1.0": java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.setAuthenticationConfiguration(org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration.setObjectPostProcessor(org.springframework.security.config.annotation.ObjectPostProcessor); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectPostProcessor' defined in class org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.security.config.annotation.ObjectPostProcessor org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration.objectPostProcessor(org.springframework.beans.factory.config.AutowireCapableBeanFactory)] threw exception; nested exception is java.lang.NoClassDefFoundError: Failed to link org/springframework/security/config/annotation/configuration/AutowireBeanFactoryObjectPostProcessor (Module "deployment.MoneySpring-1.0.war:main" from Service Module Loader): org/springframework/beans/factory/SmartInitializingSingleton

Eu só consigo fazer funcionar utilizando a versão M.0.2

Nas versões apresentadas na transcrição não consigo fazer funcionar. http://imgur.com/a/LAnoD


Eu acho que a transcrição possui alguns erros:

http://i.imgur.com/zlTsVbH.png Eu não adicionei pois acredito que está informação esteja errada, pois fala que precisa de um repositorio, porém o código é de uma dependência.

http://imgur.com/a/y5aNS Na imagem tem a anotação @EnableWebSecurity e na descrição fala que vai adicionar @EnableWebMvcSecurity

Mais a baixo nas outras imagens voltou a aparecer @EnableWebMvcSecurity ao inves de @EnableWebSecurity.Portanto, troquei o @EnableWebSecurity para @EnableWebMvcSecurity, porém na versão 4.1.3(A mostrada na transcrição) o metódo está obsoleto http://imgur.com/a/yKXbc

Bruno, o meu também deu problema eu achei essa solução na documentação do Spring.

https://docs.spring.io/spring-security/site/docs/4.2.0.RELEASE/reference/htmlsingle/#maven-bom

Deixa o spring na versão 4.3.4.RELEASE e o security 4.0.1.RELEASE e adiciona esse cara para corrigir o problema de transição de versões do spring.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>4.3.4.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

Ai você consegue usar as annotations novas! espero ter ajudado!!