jhipster - jhipster 使用具有相同身份验证的 rest api 和 rest 模板
问题描述
我已经使用java(spring boot)和angular生成了一个jhipster项目,我想将angular用于管理模块,它管理站点的所有内容并在前端使用angular,在后端使用java。主页使用rest模板显示内容,我需要在管理模块和主页之间使用相同的身份验证。当我登录管理模块然后返回主页时,登录用户的名称将显示在主页中,但我无法在主页中获得登录用户的身份验证
- 在获取登录用户时的rest api中,我将使用 SecurityUtils.isAuthenticated() 进行如下检查
@Override
public ResponseEntity<?> getSalesProduct() {
if (SecurityUtils.isAuthenticated()) {
User user = userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin().get()).get();
}
- 在休息模板中,我还使用 SecurityUtils.isAuthenticated() 进行检查,但结果总是错误的
@GetMapping("/profile")
public ModelAndView profile() {
if (SecurityUtils.isAuthenticated()) {
User user = userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin().get());
}
请给我一些想法如何在主页中获得身份验证。
解决方案
这里的关键点是您使用了 2 种前端技术:Angular(由 JHipster 生成的管理单页应用程序)和带有 Thymeleaf 的 Spring MVC,它们的工作方式完全不同。
您在 JHipster 中选择的 JWT 身份验证类型要求前端通过 HTTP 标头提供身份验证令牌。在生成的 Angular 应用程序中,经过身份验证后,令牌由浏览器 LocalStorage 中的 javascript 代码存储,然后 Angular 应用程序将令牌作为 HTTP 标头添加到后端的每个请求。
当浏览器请求您的 Spring MVC 主页时,没有 javascript 代码将令牌添加到请求中,因此后端说这是一个匿名请求。
您可以尝试以下两种选择之一:
- 将您的主页编写为 Angular 应用程序,并重用生成的管理部分中的一些组件和服务
- 使用会话身份验证类型重新生成您的应用程序,因为它使用 cookie 进行身份验证,该 cookie 由浏览器自动发送到后端
推荐阅读
- javascript - 识别算子并进行计算
- php - 按自定义顺序对 Laravel 集合排序,除了 asc 或 desc
- mysql - 我需要每个用户的特定表格数据
- azure - 手动安装 azure-cli 时出错
- ceph - ceph-deploy 时如何修复 Ceph 错误
- python - Python - 接受 CLI 参数并处理它
- c# - Unity精灵编辑器不导入精灵
- r - 在 Raspberry Pi 或 Ubuntu 上保持 RData 加载
- visual-studio - Visual Studio 2017“启用编辑并继续”选项选中锁定代码文件
- codeigniter - 使用 codeigniter 和 ace-admin 模板填充模态表单