BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Spring Security 5.0.0 liberado

Spring Security 5.0.0 liberado

Favoritos

Como introdução da SpringOne Platform Conference, a Pivotal liberou o Spring Security 5.0.0, a primeira grande versão desde a 4.0.0 (lançada em março de 2015).

O Spring Security foi iniciado em 2004 com o nome de Acegi e atualmente é liderado pelo engenheiro da Pivotal Robert Winch, co-autor do livro Spring Security. A versão 5.0.0 contém mais de 400 melhorias e correções de bugs, incluindo suporte ao OAuth 2.0, suporte reativo ao Spring WebFlux e testes com o projeto Step Verifier.

O InfoQ conversou com Rob Winch, líder do Spring Security sobre a versão atual e o futuro.

InfoQ: O site de atualização é bastante robusto. Você pode resumir o lançamento?

Winch: Os destaques do Spring Security 5.0 requerem no mínimo o JDK 8, Reactive Security, OAuth 2.0 log-in (OIDC), e armazenamento de senhas modernizado.

InfoQ: Como surgiu o tema e a implementação do armazenamento de senhas modernizado?

Winch: É lamentável, mas antes do Spring Security 5.0, o armazenamento de senha era texto simples que não é totalmente seguro. Uma vez que este foi um lançamento importante, esta foi a nossa oportunidade de mudar para um padrão mais seguro.

Felizmente, tivemos a oportunidade de trabalhar com John Steven, que é um especialista em armazenamento de senhas. Na verdade, ele foi um dos principais autores do OWASP Password Storage Cheat Sheet. O Spring Security agora fornece padrões que seguem as recomendações atuais de armazenamento de senhas. Melhor ainda, podemos atualizar passivamente para diferentes mecanismos de atualização.

InfoQ: O que mais impressiona é como o Spring sempre parece entregar exatamente o que estava faltando. Como as funcionalidades são selecionadas e priorizadas?

Winch: Tentamos seguir a comunidade observando os problemas mais votados e em seguida desenvolvemos um tema em todo o portfólio. Este tema foi atualizado para ter no mínimo o JDK 8 e suporte reativo usando o Project Reactor.

InfoQ: O ciclo de lançamento do Spring Security está sendo acelerado, como descrito por Juergen Hoeller, liberando "o que está pronto" em curtos intervalos?

Winch: Sim. O Spring Security tenta seguir o ciclo de lançamento do Spring Framework para assegurar que existe segurança para o que o Spring Framework está fornecendo.

InfoQ: O que está planejado para a próxima versão?

Winch: Para a próxima versão planejamos refinar tanto o suporte ao reativo como o OAuth log-in. Também forneceremos maneiras de migrar as senhas que já estão armazenadas. Esperamos lançar uma versão inicial com suporte ao OAuth Resource Server.

Vamos ver como o Method Security foi melhorado (exemplos do site do Spring Security):

É possível habilitar a anotação baseada em segurança usando a anotação @EnableGlobalMethodSecurity em qualquer instância @Configuration para limitar o acesso ao método. Por exemplo, o código abaixo habilita a anotação @Secured.

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class MethodSecurityConfig {
// ...
}

Então é possível aplicar as anotações no nível dos métodos:

public interface BankService {

@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);

@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account[] findAccounts();

@Secured("ROLE_TELLER")
public Account post(Account account, double amount);
}

Entretanto, às vezes queremos mais flexibilidade do que a fornecida pelo GlobalMethodSecurity. Para esses casos, o Spring Security 5.0 introduz a possibilidade do desenvolvedor fornecer uma implementação própria criando uma classe de configuração que estende GlobalMethodSecurityConfiguration e adicionar a anotação @EnableGlobalMethodSecurity na classe de configuração:

@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
	@Override
	protected MethodSecurityExpressionHandler createExpressionHandler() {
		// ... create and return custom MethodSecurityExpressionHandler ...
		return expressionHandler;
	}
}

Uma funcionalidade dos streams reativos do Reactor é permitir que uma única thread possa alocar novos jobs, o que introduz novos desafios para implementar mapeamentos ThreadLocal. O Reactor respondeu com a reativa Context API, um tipo de ThreadLocal map reativa.

É possível acessar o contexto reativo através do estático ReactiveSecurityContextHolder.getContext(), que permite que um token de segurança (e outros dados específicos) seja carregado através das chamadas de métodos.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT