在Appfuse中如何取得当前登录用户名

Appfuse是个比较好的J2EE开发框架,我在实际开发中遇到这样的问题,就是要对登录用户的一些关键操作进行日志记录,以备将来审记时使用,但是发现它好像没有直接提供类似的方法,只好自己去看原码来研究了。

Appfuse的登录,权限控制都是通过Acegi来实现的,通过网上查找,看资料先后找到了两个方法,和大家分享一下。


1)方案一
在Appfuse中如何得到当前登录用户?
 
    public String getCurrentUser(HttpServletRequest request){
     String userID;
     HttpSession session = request.getSession();
     userID=(String)session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY) ;
     return userID;
    
    }

此方法好像通过保存session,而不是输入用户名来登录时好像会有问题(没有详细去确认)。


2)方案二
Appfuse的org.appfuse.model.User实现接口org.acegisecurity.userdetails.UserDetails

而Authentication接口定义了一个方法 public Object getPrincipal();

Object这个对象在appfuse实现了org.acegisecurity.userdetails.UserDetails

所以只要能够在Appfuse中得到Authentication就可以得到当前用户名了。


 static public String getCurrentUserID() {
  SecurityContext ctx = SecurityContextHolder.getContext();
  Authentication auth = ctx.getAuthentication();
  if (auth != null) {   
  //注:为了代码的简捷易读,此处省略了变量转型时的检查,不过在默认的Appfuse中是不会出问题的。
   UserDetails user = (UserDetails)auth.getPrincipal();
   return user.getUsername();  
  } else {
   return null;
  }

 }


方案二参考文献:
http://www.blogjava.net/youlq/archive/2006/03/03/33487.html


其它相关参考:
http://www.blog.sh/u4/wealupa/79288.html
http://www.javaeye.com/article/17896?page=3

你可能感兴趣的:(在Appfuse中如何取得当前登录用户名)