四、FAQ

转载于: http://www.springside.org.cn/docs/reference/Acegi5.htm

四 FAQ 

4.1 FAQ

  1. Q:   能否脱离Spring框架来使用Acegi?
    A:  虽然Acegi 没有要求必须使用Spring Framework,但事实上Acegi很大程度上利用了Spring的IOC和AOP,很难脱离Spring的单独使用。
  2. Q:  Acegi有对xfire的支持吗?
    A: 有,详见http://jira.codehaus.org/browse/XFIRE-389
  3. Q: 为何无论怎么设置都返回到登陆页面无法成功登陆?
    A:  检查登陆页面或登陆失败页面是否只有ROLE_ANONYMOUS权限

4.2 Acegi 补习班

要了解Acegi,首先要了解以下几个重要概念:

  1. Authentication
    Authentication对象包含了principal, credentials 和 authorities(authorities要赋予给principal的),同时也可以包含一些附加的认证请求信息,如TCP/IP地址和Session id等。
  2. SecurityContextHolder
    SecurityContextHolder包含ThreadLocal私有属性用于存取SecurityContext, SecurityContext包含Authentication私有属性, 看以下一段程序


    public void getSecurityContextInformations() {
      SecurityContext sc = SecurityContextHolder.getContext();
      Authentication auth = sc.getAuthentication();
      Object principal = auth.getPrincipal();
      if (principal instanceof UserDetails) {
       //用户密码
       String password = ((UserDetails) principal).getPassword();
       //用户名称
       String username = ((UserDetails) principal).getUsername();
       //用户权限
       GrantedAuthority[] authorities = ((UserDetails) principal).getAuthorities();
       for (int i = 0; i < authorities.length; i++) {
        String authority = authorities[i].getAuthority();
       }
      }
      Object details = auth.getDetails();
      if (details instanceof WebAuthenticationDetails) {
       //用户session id
       String SessionId = ((WebAuthenticationDetails) details).getSessionId();
      }
     }
  3. AuthenticationManager
    通过Providers验证在当前 ContextHolder中的Authentication对象是否合法。
  4. AccessDecissionManager
    经过投票机制来审批是否批准操作
  5. RunAsManager
    当执行某个操作时,RunAsManager可选择性地替换Authentication对象
  6. Interceptors
    拦截器(如FilterSecurityInterceptor,JoinPoint,MethodSecurityInterceptor等)用于协调授权,认证等操作

你可能感兴趣的:(FAQ)