Magnolia中获取当前登录用户用户名异常,如何获取真实用户名?
获取Magnolia当前登录用户的正确方式
哦,这个坑我之前踩过!你用MgnlContext.getInstance().getJCRSession("website").getUserID()拿到admin是因为这个方法获取的是系统级JCR会话——Magnolia默认会用admin身份启动这类会话,和当前登录的用户完全无关。
要拿到真实的登录用户名,有两种靠谱的方式:
1. 直接从MgnlContext获取当前用户(推荐)
这是最简单直接的方式,不需要绕到JCR会话里:
// 获取当前登录用户的用户名 String userName = MgnlContext.getUser().getName(); // 如果需要完整的用户对象,还能拿到更多信息 User currentUser = MgnlContext.getUser(); String userEmail = currentUser.getEmail(); String userUUID = currentUser.getUUID();
2. 获取用户级别的JCR会话(如果需要带用户权限操作JCR)
如果你确实需要基于当前用户权限的JCR会话,可以指定会话类型为USER:
Session userSession = MgnlContext.getJCRSession("website", SessionType.USER); String userName = userSession.getUserID();
这种方式拿到的会话会继承当前登录用户的权限,执行操作时会受用户的访问控制规则限制。
为什么原来的方法不行?
Magnolia的JCR会话分两种:
- 系统会话:默认用admin权限运行,用于后台系统操作、无需用户权限的场景,调用
getJCRSession(String workspace)时默认返回这种会话。 - 用户会话:和当前登录用户绑定,继承用户的权限,必须显式指定
SessionType.USER才能获取。
所以你之前的代码拿到的是系统会话的用户ID,自然就是admin啦~
内容的提问来源于stack exchange,提问作者Ana Sustic
相关产品推荐
相关产品推荐

