如何从Spring Boot REST Controller获取角度视图中的userid

时间:2017-08-05 03:33:38

标签: angularjs rest spring-boot thymeleaf

在我的应用程序中,我使用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 个答案:

答案 0 :(得分: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>