在 spring + angular 中获取当前登录用户
Posted
技术标签:
【中文标题】在 spring + angular 中获取当前登录用户【英文标题】:Getting current logged user in spring + angular 【发布时间】:2016-07-18 20:43:30 【问题描述】:我在我的 Spring Boot 应用程序中使用 Spring Security,我想从 Principal#getName
获取当前登录的用户,但我有一个模板解析错误,它包含我想要获取的用户名。
这是我的控制器:
import java.security.Principal;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class PageController
@RequestMapping(value = "/api/loggeduser", method = RequestMethod.GET)
public String printWelcome(ModelMap model, Principal principal)
String name = null;
if (principal !=null)
name = principal.getName();
model.addAttribute("username", name);
return name;
这是我获取登录用户的 AngularJs 函数:
app.controller('Usercontr', function($scope, $http)
$http.get("/api/loggeduser").success(function (data)
$scope.nom = data;
console.log($scope.nom)
)
);
这是错误:
解析模板“kamel.mili”时出错,模板可能不存在或 任何配置的模板解析器都可能无法访问
Kamel.mili
是登录的用户名。你能帮我么。我仅将百里香用于登录页面,其他一切都是 html + AngularJs。我不知道为什么 thymeleaf 会把它放在这个控制器上。
【问题讨论】:
【参考方案1】:给你的控制器添加@ResponseBody
注解:
@ResponseBody
@RequestMapping(value = "/api/loggeduser", method = RequestMethod.GET)
public String printWelcome(ModelMap model, Principal principal ) ...
当您使用@Controller
构造型注解时,Spring MVC 将尝试将您的String
返回值解析为View
,因此会出现错误:
解析模板“kamel.mili”时出错,模板可能不存在或 任何配置的模板解析器都可能无法访问
如果您只想将返回值写入响应正文,您可以将控制器设为 @RestController
或使用 @ResponseBody
注释特定控制器。
这有点离题了,但是由于您使用的是客户端视图渲染,所以 ModelMap
非常没用。您可以放心地摆脱它。
【讨论】:
看来我在检索无法解析的数据时遇到问题,是吗【参考方案2】:您需要执行以下操作:
@RequestMapping(value = "/api/loggeduser", produces =MediaType.APPLICATION_JSON_VALUE )
public ResponseEntity<String> findMessagesForUser(Principal principal)
return new ResponseEntity<String>(principal.getName(), HttpStatus.OK);
或者您可以使用响应构建器:
@RequestMapping(value = "/api/loggeduser", produces =MediaType.APPLICATION_JSON_VALUE )
public ResponseEntity<String> findMessagesForUser(Principal principal)
return ResponseEntity.ok(principal.getName());
【讨论】:
【参考方案3】:如果您已正确配置模板解析器,那么您应该检查您的模板。 printWelcome() 的返回字符串应该与在您的视图/模板文件夹中创建的视图之一匹配。在您的情况下,您将自己返回用户名,我想它应该是欢迎类型的页面。
【讨论】:
以上是关于在 spring + angular 中获取当前登录用户的主要内容,如果未能解决你的问题,请参考以下文章
带有 Spring Security 的 Angular 2 应用程序并从 Spring REST 服务中获取数据
如何在 Angular 中获取当前的路由段(不是完整的 url)