Spring Security Lembre-se de mim
1. Visão geral
Este tutorial mostraráhow to enable and configure Remember Me functionality in a web application com Spring Security. A configuração dethe MVC application with security and a simple form login já foi discutida.
O mecanismo será capaz deidentify the user across multiple sessions - então a primeira coisa a entender é que Lembre-se de mim só é ativado emafter the session times out. Por padrão, isso acontece após 30 minutos de inatividade, mastimeout can be configured emweb.xml.
[.iframe-fluido] ##
2. A configuração de segurança
Vamos ver como definir a configuração de segurança usando Java:
@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean("authenticationManager")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user1").password("{noop}user1Pass").roles("USER")
.and()
.withUser("admin1").password("{noop}admin1Pass").roles("ADMIN");
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/anonymous*").anonymous()
.antMatchers("/login*").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/login")
.failureUrl("/login.html?error=true")
.and()
.logout().deleteCookies("JSESSIONID")
.and()
.rememberMe().key("uniqueAndSecret")
;
}
}
Como você pode ver,the basic configuration using the rememberMe() method é extremamente simples, embora permaneça muito flexível, embora com opções adicionais. Okey é importante aqui - é um segredo de valor privado para todo o aplicativo e será usado ao gerar o conteúdo do token.
Além disso, otime the token is valid can be configured do padrão de 2 semanas para - por exemplo - um dia usandotokenValiditySeconds():
rememberMe().key("uniqueAndSecret").tokenValiditySeconds(86400)
Também podemos dar uma olhada na configuração XML equivalente:
3. O Formulário de Login
O formulário de login é semelhante athe one we used for form login:
Login
Observe o mapeamento de entradacheckbox recém-adicionado pararemember-me. Essa entrada adicionada é suficiente para efetuar login com a opção lembrar-me ativa.
Esse caminho padrão também pode ser alterado da seguinte maneira:
.rememberMe().rememberMeParameter("remember-me-new")
4. O biscoito
O mecanismo criará um cookie adicional - o cookie "lembrar-me" - quando o usuário efetuar login.
ORemember Me cookie contém os seguintes dados:
-
username - para identificar o principal conectado
-
expirationTime - para expirar o cookie; o padrão é 2 semanas
-
MD5 hash - dos 2 valores anteriores -usernameeexpirationTime, mais opassworde okey predefinido
A primeira coisa a notar aqui é que tantousernameepassword fazem parte do cookie - isso significa que, se algum for alterado, o cookie não é mais válido. Além disso, ousername pode ser lido do cookie.
Além disso, é importante entender que esse mecanismo é potencialmente vulnerável se o cookie de lembrar de mim for capturado. The cookie will be valid and usable até que expire ou as credenciais sejam alteradas.
5. Na prática
Para ver facilmente o mecanismo de lembrar de mim funcionando, você pode:
-
faça login com lembre-se de mim ativo
-
espere a sessão expirar (ou remova o cookieJSESSIONID no navegador)
-
recarregue a página
Sem lembrar de mim ativo, depois que o cookie expirar, o usuário deverá estarredirected back to the login page. Com lembre-se de mim, o usuário agorastays logged in com a ajuda do novo token / cookie.
6. Conclusão
Este tutorial mostrou como instalar e configurar a funcionalidade Remember Me na configuração de segurança e descreveu brevemente que tipo de dados entra no cookie.
A implementação pode ser encontrada emthe example github project - este é um projeto baseado em Eclipse, portanto, deve ser fácil de importar e executar como está.
Quando o projeto é executado localmente, ologin.html pode ser acessado emlocalhost.