Acegi 安全框架中也有Principal(负责人),Credentials(信任状)的概念,它们可以是任何对象,并由Authentication(证明,鉴定)对象封装,代表一个用户认证。Principal通常是用户名Credentials通常是口令,不过,在Acegi框架中,通常UserDetails作为Principal,除了存储了用户名外,UserDetails还包含了用户角色等权限信息。此外,Authentication对象还能存储一些与认证请求有关的附加信息,例如,用户的IP地址。
一旦用户通过了认证,Authentication对象就将存储在HttpSession对象中,不过,HttpSession对象中,不过,HttpSession并非总是能被应用程序访问,因此,Acegi使用SecurityContext来存储Authentication,默认情况下,Acege使用ThreadLocal来实现SecurityContext。在应用程序中,任何时候获取Authentication对象的方式就是调用SecurityContextHolder.getContext().getAuthentication()。
例如:
SecurityContext ctx = SecurityContextHolder.getContext();
Authentication auth = ctx.getAuthentication();
if(auth.getPrincipal() instanceof UserDetails)
user = (TUser)auth.getPrincipal();