Angular 6和Spring Boot通过基于会话的登录记住了我

时间:2019-04-26 10:49:53

标签: java angular spring-boot

当前,在我们的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标头。

请向某人建议我在这里缺少的内容。 预先感谢

1 个答案:

答案 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。

相关问题