当前,在我们的Spring Boot应用程序中,我们基于HeaderHttpSessionStrategy认证用户,HeaderHttpSessionStrategy是基于会话的认证。尝试添加“记住我”功能,但spring不会将用户存储在persistent_logins中,即cookie也未创建客户端。
我添加了
//this line added to HttpSecurity object
.and().rememberMe().rememberMeParameter("rememberMe")
.tokenRepository(persistentTokenRepository())
.tokenValiditySeconds(86400)
@Bean
public DataSource getDataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("${db.driver}");
dataSourceBuilder.url("${db.url}");
dataSourceBuilder.username("${db.username}");
dataSourceBuilder.password("${db.password}");
return dataSourceBuilder.build();
}
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(getDataSource());
return jdbcTokenRepository;
}
我们将Angular 6用作前端客户端,因此在身份验证终结点的Post方法中发送RememberMe标头。
请向某人建议我在这里缺少的内容。 预先感谢
答案 0 :(得分:1)
在深入研究“记住我”身份验证之后,我就能实现该功能。 必须归功于此link
的作者仅此链接对于后端部分就足够了。
涉及角度6时,将响应读取为ResponseEntity,这样它将自动为您创建一个cookie。 (如果万一您有要从auth端点接收的数据,则将它们添加到响应标头中,以data.headers.get('some_header_from_api')
的形式在组件中读取)
getToken(username:string,password:string,rememberMe:string){
let httpHeaders = new HttpHeaders({
'Cache-Control': 'no-cache',
'X-Requested-With': 'XMLHttpRequest',
'Authorization': 'Basic '+ btoa(username +':'+ password),
});
return this.http.get<HttpResponse<Object>>(this.BASE_URL+"?rememberMeChecked="+rememberMe,{ headers: httpHeaders,withCredentials: true,observe: 'response'});
}
就这样。请等待,如果您正在考虑如何在每个请求中发送“记住我的cookie”,实际上,您无需执行任何其他工作,angular会自动为您添加cookie。