使用具有相同身份验证的rest api和rest模板的jhipster

时间:2019-06-21 11:36:13

标签: jhipster

我已经使用Java(spring boot)和angular生成了一个jhipster项目,我想将angular用于管理模块,它管理站点的所有内容,并在前端使用java和在后端使用java。主页使用rest模板显示内容,我需要在admin模块和主页之间使用相同的身份验证。当我登录到管理模块,然后返回首页时,登录用户的名称将显示在首页中,但无法在首页中获得登录用户的身份验证

  1. 在rest api中获取登录用户时,我将使用SecurityUtils.isAuthenticated()进行如下检查
@Override
public ResponseEntity<?> getSalesProduct() {
    if (SecurityUtils.isAuthenticated()) {
        User user = userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin().get()).get();
    }
  1. 在其余模板中,我还使用SecurityUtils.isAuthenticated()进行检查,但结果始终为假
@GetMapping("/profile")
public ModelAndView profile() {
     if (SecurityUtils.isAuthenticated()) {             
         User user = userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin().get());
     }

请给我一些如何在主页上进行身份验证的想法。

1 个答案:

答案 0 :(得分:1)

这里的关键点是您正在使用两种前端技术:Angular(由JHipster生成的管理单页应用程序)和带有Thymeleaf的Spring MVC,它们的工作方式完全不同。

您在JHipster中选择的JWT身份验证类型要求前端通过HTTP标头提供身份验证令牌。在生成的angular应用程序中,通过身份验证后,令牌将由javascript代码存储在浏览器LocalStorage中,然后令牌由angular app作为HTTP标头添加到每个后端请求。

当浏览器请求您的Spring MVC主页时,没有javascript代码将令牌添加到请求中,因此后端说这是一个匿名请求。

您可以尝试以下两种选择之一:

  • 将您的主页写为Angular应用,然后重新使用生成的管理部分中的某些组件和服务
  • 使用会话身份验证类型重新生成您的应用程序,因为它使用cookie进行身份验证,该cookie由浏览器自动发送到后端