Angular e Spring security

Só consigo utilizar o Spring security e o angular, se na configuração do spring security tiver assim: http.csrf().disable();

Mas preciso utilizar o csrf().

Como fazer ?

Não, você pode usar sem isso mesmo.
Precisará configurar corretamente, apenas isso.

Entendi. mas este parâmetro não é para segurança de sistemas ?

Não tem como mesmo ?

Tem.
Não sei se está usando spring boot, se estiver, olha este artigo

Sim, estou usando o spring boot

Mas no projeto não tem esta classe

import org.springframework.boot.autoconfigure.security.SecurityProperties;

O maven está assim

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot</artifactId>
	<version>2.0.0.RELEASE</version>
</dependency>

Cara, eu tive uma série de problemas ao usar versões recentes do Spring Boot.
Para ter uma ideia, para implementar um oauth2 com mongodb, precisei usar a versão 1.2.
Pode ter a ver com a versão.
De qualquer forma, tenta seguir aquele artigo que sugeri.

Entendi. Vou ver se eles falam qual a versão lá.

Obrigado.

Bem entendi após ver alguns exemplos funcionais (Vídeos), textos, exemplos no GitHub e entendi que funciona. kkkk

Tem que ser gerado um Token, pelo Spring. O mesmo retorna para o usuário Angular. Este Token fica nuna variável tipo global, que vai ser sempre passado para o servidor.

Toda requisição, seja ela POST, GET, etc, vai ser passado para o servidor JAVA, este token, sem que o usuário perceba, que deve ser validado, pois existem várias configurações, neste token.

Resolvei tentar fazer do mesmo que este exemplo https://github.com/jmw5598/gro-light-automationhttps://github.com/jmw5598/gro-light-automation.

Consegui bloquear uma página, pelo spring security e liberar também, desde que esteja dentro .permitAll(), do secutity.

Entendi também que .antMatchers("/admin/").authenticated().anyRequest()**, o que tiver com este endereço tem que estar validado com o token.

O que consegui… Gerar o token.

Mas não consegui recuperar o mesmo para fazer as validações necessárias.

O método é este: String authToken = request.getHeader(this.tokenHeader);.

Se altero para String authToken = request.getHeader(“Authorization”);, consigo recupar o token, mas não consigo recuperar as informações de dentro do token.

O que quer dizer com “não consegui recuperar”?

Mas o token é a informação completa, não tem nada dentro dele (eu sei, o mecanismo de validação do spring security vai utilizar o token para validar N coisas, dentre as quais, o tempo de expiração do mesmo e a identidade de quem requisita um serviço/página).

Então o código está assim String authToken = request.getHeader(this.tokenHeader);.

Como não sei o que vem no header, esta variável está vazia, ou não entendi como buscar e preencher ela.

O que eu quis dizer que por exemplo, neste token eu posso colocar n coisas, pelo que eu entendi. Mas até então eu não vou e nem preciso disso.

O que eu preciso:

  1. Validar este token gerado
  2. Validar se ele é autentico.
  3. Validar se o Spring secutity o libera, isto é, login e senha corretos.

Entendeu ?

Sobre o Spring Secutiry, pelo que entendi, vou usar uma classe com o nome JwtAuthenticationTokenFilter, mas para chegar até ela, preciso consegui pegar este token e validar no em um método já pronto, que está neste exemplo.

Eu não sei bem como isso funciona.
Desenvolvi, no fim do ano passado, um sistema com angular 4 + Spring Boot, autenticado com oauth2 provido pelo mongodb. Então tem bastante diferença do que você está fazendo.
Vou dar uma olhada e ver se consigo ajudar em algo mais.

Obrigado. Esto tentando resolver isto. Mas no testes, estou colocando no cabeçalho Authorization e Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIwMjY3OTUwMDYzNiIsImF1ZGllbmNlIjoid2ViIiwiY3JlYXRlZCI6MTUyMTgyOTg2MjAwNSwiZXhwIjoxNTIxODI5ODcwfQ.pROYTD7Vh31Y-blRaZvgf1pAPG3MG9ZIIu6B7LiKMzkWSIHfUxHRqsXoSGpBecLgRNbIF50_lqzybvAUm3ryfg

Após gerar o token.

Então, o que eu utilizei sempre me forçava a, cada requisição, inserir o bearer no header.

Sim. Mas neste exemplo, ele tenta busca no Header por aqui String authToken = request.getHeader(this.tokenHeader);., mas não consegui identificar o que vem nesta variável this.tokenHeader.

O código está dando esta exceção:

11:01:59,863 ERROR [br.com.netsoft.configuracao.security.JwtTokenUtil] (default task-6) : io.jsonwebtoken.MalformedJwtException: Unable to read JSON value: �z��&�r#�$�3S"
	at io.jsonwebtoken.impl.DefaultJwtParser.readValue(DefaultJwtParser.java:554) [jjwt-0.9.0.jar:0.9.0]
	at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:252) [jjwt-0.9.0.jar:0.9.0]
	at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:481) [jjwt-0.9.0.jar:0.9.0]
	at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:541) [jjwt-0.9.0.jar:0.9.0]
	at br.com.netsoft.configuracao.security.JwtTokenUtil.getClaimsFromToken(JwtTokenUtil.java:95) [classes:]
	at br.com.netsoft.configuracao.security.JwtTokenUtil.getUsernameFromToken(JwtTokenUtil.java:47) [classes:]
	at br.com.netsoft.configuracao.security.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:41) [classes:]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at br.com.netsoft.component.CrossOriginFilter.doFilterInternal(CrossOriginFilter.java:36) [classes:]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) [spring-security-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:248) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:77) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:167) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:761) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_131]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_131]
	at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_131]
Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 5)): only regular white space (\r, \n, \t) is allowed between tokens
 at [Source: �z��&�r#�$�3S"; line: 1, column: 2]
	at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1419) [jackson-core-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:508) [jackson-core-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:459) [jackson-core-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipWSOrEnd(ReaderBasedJsonParser.java:1874) [jackson-core-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:571) [jackson-core-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3090) [jackson-databind-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3036) [jackson-databind-2.4.1.jar:2.4.1]
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2146) [jackson-databind-2.4.1.jar:2.4.1]
	at io.jsonwebtoken.impl.DefaultJwtParser.readValue(DefaultJwtParser.java:552) [jjwt-0.9.0.jar:0.9.0]
	... 53 more

Algo sobre caracteres

O Token está vindo assim: Authorization - Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIwMjY3OTUwMDYzNiIsImF1ZGllbmNlIjoid2ViIiwiY3JlYXRlZCI6MTUyMTk4NDY1ODMwOCwiZXhwIjoxNTIxOTg0NjU5fQ.MWOPiMJjCN4iQbcbhDKz3LKCNNdO-rNK8tIWfuwmZFTUwic0tUYk2poVRztb6Y6byrsOOUA6eQ7-jVkWOH6EEg

Quando ele chega neste método: parseClaimsJws(token);

Ainda não descobri o que é …

Ninguém passou por isto ?