如何从 Spring Boot REST Controller 获取角度视图中的用户 ID

Posted

技术标签:

【中文标题】如何从 Spring Boot REST Controller 获取角度视图中的用户 ID【英文标题】:How to get userid in angular view from Spring Boot REST Controller 【发布时间】:2018-01-13 01:08:54 【问题描述】:

在我的应用程序中,我使用 Spring Security 使用数据库进行身份验证。重定向策略的一部分是,如果用户是 ADMIN,则将用户重定向到 ADMIN(HOME) 页面,如果用户是 USER,则将该用户重定向到 USER 页面。

当角色为 USER 的用户登录时,他会看到 USER 页面,如下所示:

<html ng-app="benefitApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Benefit Application</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="/css/bootstrap.css" />
<script src="https://code.angularjs.org/1.6.1/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular-route.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular-resource.js"></script>
<script type="text/javascript" src="./js/app.js"></script>
</head>
<body ng-controller="UserCtrl">
<p>Hello <p th:text="$name"></p></p>
<div>
    <ul class="menu">        
        <li><a href='userProfile(userid)'>userprofile</a></li>                
    </ul>
    <div ng-view="ng-view"></div>
</div>
</body>
</html>

我正在尝试将登录用户的 ID 从 REST 控制器传递到此页面,如下所示:

@RequestMapping(value = "/user", method = RequestMethod.GET)
public String userpage(Model model) 
    LOGGER.info(" Enter >> userpage() ");
    Authentication auth = SecurityContextHolder.getContext()
        .getAuthentication();
    String name = auth.getName();
    User user = userManager.findUserByEmail(name);
    model.addAttribute("name", name);
    model.addAttribute("userid", user.getId());
    return "user";

但我在 user.html 页面中没有得到任何用户 ID。我在这里想念什么?

【问题讨论】:

【参考方案1】:

您正在使用 angularjs 数据绑定表达式将 userid 绑定到函数:

<li><a href='userProfile(userid)'>userprofile</a></li> 

这是错误的方式。

由于您使用的是 Thymeleaf,我建议您使用这样的表达式来绑定用户配置文件的链接:th:href="@$link"

@ 前缀用于指定链接,$ 前缀用于绑定您的模型值,然后使用th:href 创建链接,如下所示:

<li><a th:href="@'#/user/profile/' + $userid">userprofile</a></li> 

或者你可以像这样使用 ng-init 初始化一个变量:

<div ng-init="userId = $userid"></div>

并像这样使用它:

<li><a ng-href="#/user/profile/userId">userprofile</a></li> 

【讨论】:

以上是关于如何从 Spring Boot REST Controller 获取角度视图中的用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Spring Boot REST Controller 获取角度视图中的用户 ID

如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API

Spring Boot JWT - 如何实现刷新令牌和注销 REST-API

如何在 Spring Boot Rest 调用中传递 Date 类型的值?

如何在 Spring-boot 中不模拟服务类的情况下为 REST 控制器端点编写单元测试

如何在外部 tomcat 中部署 Spring-boot REST API