Java Angular 6和spring boot使用基于会话的登录记住我
目前,在我们的spring boot应用程序中,我们正在基于HeaderHttpSessionStrategy(基于会话的身份验证)对用户进行身份验证。试图添加“记住我”功能,但spring并没有将用户存储到持久登录中,也没有在客户端创建cookie 我补充说Java Angular 6和spring boot使用基于会话的登录记住我,java,angular,spring-boot,Java,Angular,Spring Boot,目前,在我们的spring boot应用程序中,我们正在基于HeaderHttpSessionStrategy(基于会话的身份验证)对用户进行身份验证。试图添加“记住我”功能,但spring并没有将用户存储到持久登录中,也没有在客户端创建cookie 我补充说 //this line added to HttpSecurity object .and().rememberMe().rememberMeParameter("rememberMe") .tokenRepository(persis
//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头
请向某人推荐我这里缺少的东西。
提前感谢在深入了解“记住我”身份验证之后,我能够实现该功能。 这本书的作者必须受到表扬 仅此链接就足以用于后端部分 说到angular 6,将响应读作ResponseEntity,这样它就会自动为您创建一个cookie。(如果您有从auth端点接收的数据,那么将它们添加到响应头中,在组件中将它们作为
data.headers.get('some\u header\u from\u api')读取。
)
getToken(用户名:string,密码:string,记住:string){
让httpHeaders=新的httpHeaders({
“缓存控制”:“无缓存”,
“X-request-With':“XMLHttpRequest”,
“授权”:“基本”+btoa(用户名+:“+密码),
});
返回this.http.get(this.BASE_URL+”?rememberchecked=“+rememberMe,{headers:httpHeaders,withCredentials:true,注意:'response'});
}
就这样。等等,如果您正在考虑如何在每个请求中发送“记住我”cookie,实际上,您不需要做任何额外的工作,angular会自动为您添加cookie
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'});
}