使用Spring Security时,获取bean中当前用户名(即SecurityContext)信息的正确方法是什么?我有一个使用Spring Security的Spring MVC Web应用程序。我想知道当前登录用户的用户名。我正在使用下面给出的代码段。这是接受的方式吗?我不喜欢在这个控制器中调用静态方法 - 这违背了Spring的全部目的,恕我直言。有没有办法配置应用程序以注入当前的SecurityContext或当前的身份验证? @RequestMapping(method = RequestMethod.GET)
public ModelAndView showResults(final HttpServletRequest request...) {
final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
...
}
3 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
如果您使用的是Spring Security ver> = 3.2,则可以使用@AuthenticationPrincipal
注释:
@RequestMapping(method = RequestMethod.GET)public ModelAndView showResults(@AuthenticationPrincipal CustomUser currentUser, HttpServletRequest request) { String currentUsername = currentUser.getUsername(); // ...}
这CustomUser
是一个自定义对象,它实现UserDetails
了自定义返回的对象UserDetailsService
。
可以在Spring Security参考文档的@AuthenticationPrincipal章节中找到更多信息。
添加回答
举报
0/150
提交
取消