【问题标题】:jhipster using rest api and rest template with the same authenticationjhipster 使用具有相同身份验证的 rest api 和 rest 模板
【发布时间】:2019-11-04 06:15:01
【问题描述】:

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

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

请给我一些想法如何在主页上获得身份验证。

【问题讨论】:

  • 感谢@GaëlMarziou 我编辑了我的问题,我使用了为主页生成的 Jhipster 的 SecurityUtils
  • 我不确定您所说的“主页使用rest模板显示内容”是什么意思。从您使用 ModelAndView 提取的代码中,我猜您使用的是 Spring MVC 视图模板。您使用哪个模板引擎?百里香,Fr​​eemarker?
  • 感谢@GaëlMarziou,我使用 Thymeleaf。我必须在此之前和之后获取登录用户,我会将数据填充到 Thymeleaf 但我无法获取用户登录信息,因为 SecurityUtils.isAuthenticated() 总是错误的
  • 好的,所以有两种不同的前端方法。您在 JHipster 中选择了哪种身份验证类型:JWT、会话、...?
  • 感谢@GaëlMarziou,我的项目使用 JWT 身份验证

标签: jhipster


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢@Gaël Marziou,我会继续你的方法
猜你喜欢
  • 2012-04-30
  • 2016-01-31
  • 2023-03-10
  • 1970-01-01
  • 2018-07-26
  • 2012-01-20
  • 1970-01-01
  • 2018-07-04
  • 2013-03-06
相关资源
最近更新 更多