五 FAQ
5.1 FAQ
- Q: 能否脱离Spring框架来使用Acegi?
A: 虽然Acegi 没有要求必须使用Spring Framework,但事实上Acegi很大程度上利用了Spring的IOC和AOP,很难脱离Spring的单独使用。
- Q: Acegi有对xfire的支持吗?
A: 有,详见http://jira.codehaus.org/browse/XFIRE-389
- Q: 为何无论怎么设置都返回到登陆页面无法成功登陆?
A: 检查登陆页面或登陆失败页面是否只有ROLE_ANONYMOUS权限
5.2 Acegi 补习班
要了解Acegi,首先要了解以下几个重要概念:
-
Authentication
Authentication对象包含了principal, credentials 和 authorities(authorities要赋予给principal的),同时也可以包含一些附加的认证请求信息,如TCP/IP地址和Session id等。
-
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) {
String SessionId = ((WebAuthenticationDetails) details).getSessionId();
}
}
-
AuthenticationManager
通过Providers验证在当前 ContextHolder中的Authentication对象是否合法。
-
AccessDecissionManager
经过投票机制来审批是否批准操作
-
RunAsManager
当执行某个操作时,RunAsManager可选择性地替换Authentication对象
-
Interceptors
拦截器(如FilterSecurityInterceptor,JoinPoint,MethodSecurityInterceptor等)用于协调授权,认证等操作
大盘预测
国富论
posted on 2007-09-12 14:46
华梦行 阅读(134)
评论(0) 编辑 收藏