【发布时间】:2020-12-02 20:49:27
【问题描述】:
我有一个 managedbean,其中包含返回登录用户的用户名的函数:
public String getConnectedUser( ){
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
if (authentication == null)
return null;
Object principal = authentication.getPrincipal();
if (principal instanceof UserDetails) {
return ((UserDetails) principal).getUsername();
} else {
return principal.toString();
}
我想使用我从 spring security 获得的用户名让用户使用我的 DAO。 当我在 @PostConstruct 方法中调用它时,它不会返回任何内容。
@PostConstruct
public void init() {
user = utilisateurService.getUtilisateurByLogin( getConnectedUser());
但是当我在 JSF 中调用它时,它会显示正确的登录用户名:
<h:outputText
value="Logged as : #{testMB.getConnectedUser()}" />
结论:使用 Init 函数我在视图中什么也得不到,通过 JSF 调用我得到用户名,有人可以帮助我吗?
编辑:我运行了一些测试,似乎身份验证为空,即使我已登录
【问题讨论】:
-
为什么在 PostConstruct 中需要它?您不能在常规 DAO 调用期间调用该方法吗?到那时应该可以使用。
-
@SKumar 我把它放在 PostConstruct 中,因为我猜初始化发生在那里?我尝试在 service/dao 中输入它并从 PostConstruct 中调用它,我想我没有清楚地理解你,请向我解释更多
标签: java spring spring-security