讨论:Acegi安全框架能解决和不能解决的安全有关问题
讨论:Acegi安全框架能解决和不能解决的安全问题
就我目前对Acegi的了解,Acegi安全框架主要解决的安全问题是访问入口级别的安全问题,安全问题我将其分为三类:
1) 入口级安全
具体体现上界面上每个操作菜单,操作元素是否可操作,在服务端则对URL程序资源和业务服务类方法的限制。
2) 数据域安全
数据域控制包括两个部分,分别是:
2.1 行级数据控制 即可以可以访问哪些数据行,一般的限制项是数据所属单位;
2.2 字段级控制 即用户可以访问数据行的哪些字段;
3)系统级安全
如访问IP段的限制,登录时间段的限制,登录次数的限制等。
Acegi由于和业务无关,所以只能解决1)点的安全问题,2),3)的安全问题是和业务,组织机构相关的,所以必须程序编码解决。
严格上说,Acegi对1)点的解决也是不彻底的,因为它只解决了服务端的程序资源访问控制,操作界面上的元素是要我们编码实现的。不过,这也好理解,因为界面的入口元素是最灵活多样的,Acegi不应该涉足。
所以我觉得Acegi在一个很适合的领域时,很好的解决了一些适合框架解决的问题,它不贪恋那些不容易框架实现而需求变化大多的问题。
Acegi由于和业务无关,所以只能解决1)点的安全问题,2),3)的安全问题是和业务,组织机构相关的,所以必须程序编码解决。
严格上说,Acegi对1)点的解决也是不彻底的,因为它只解决了服务端的程序资源访问控制,操作界面上的元素是要我们编码实现的。不过,这也好理解,因为界面的入口元素是最灵活多样的,Acegi不应该涉足。
所以我觉得Acegi在一个很适合的领域时,很好的解决了一些适合框架解决的问题,它不贪恋那些不容易框架实现而需求变化大多的问题。
1. 实例级权限控制 Acegi 通过 ACL 实现, 虽然使用上不太方便, 但它是标准的方案
2. 属性级权限控制还没听有通用的方案
3. 界面上通过 auth tag 实现控制, 一般的需求足够用了, 太特殊的也不是 security framework 管辖的范畴
4. 限登录 ip, 时间, 次数本身也不是难点, 新的版本应该会提供
Acegi由于和业务无关,所以只能解决1)点的安全问题,2),3)的安全问题是和业务,组织机构相关的,所以必须程序编码解决。
严格上说,Acegi对1)点的解决也是不彻底的,因为它只解决了服务端的程序资源访问控制,操作界面上的元素是要我们编码实现的。不过,这也好理解,因为界面的入口元素是最灵活多样的,Acegi不应该涉足。
所以我觉得Acegi在一个很适合的领域时,很好的解决了一些适合框架解决的问题,它不贪恋那些不容易框架实现而需求变化大多的问题。
1. 实例级权限控制 Acegi 通过 ACL 实现, 虽然使用上不太方便, 但它是标准的方案
2. 属性级权限控制还没听有通用的方案
3. 界面上通过 auth tag 实现控制, 一般的需求足够用了, 太特殊的也不是 security framework 管辖的范畴
4. 限登录 ip, 时间, 次数本身也不是难点, 新的版本应该会提供
4.可以限制同时登录次数,详情参考springside
仿照这个写一个登录ip和时间限制的plugin一点都不难
就我目前对Acegi的了解,Acegi安全框架主要解决的安全问题是访问入口级别的安全问题,安全问题我将其分为三类:
1) 入口级安全
具体体现上界面上每个操作菜单,操作元素是否可操作,在服务端则对URL程序资源和业务服务类方法的限制。
2) 数据域安全
数据域控制包括两个部分,分别是:
2.1 行级数据控制 即可以可以访问哪些数据行,一般的限制项是数据所属单位;
2.2 字段级控制 即用户可以访问数据行的哪些字段;
3)系统级安全
如访问IP段的限制,登录时间段的限制,登录次数的限制等。
Acegi由于和业务无关,所以只能解决1)点的安全问题,2),3)的安全问题是和业务,组织机构相关的,所以必须程序编码解决。
严格上说,Acegi对1)点的解决也是不彻底的,因为它只解决了服务端的程序资源访问控制,操作界面上的元素是要我们编码实现的。不过,这也好理解,因为界面的入口元素是最灵活多样的,Acegi不应该涉足。
所以我觉得Acegi在一个很适合的领域时,很好的解决了一些适合框架解决的问题,它不贪恋那些不容易框架实现而需求变化大多的问题。
1 楼
Feiing
2006-11-04
stamen 写道
Acegi由于和业务无关,所以只能解决1)点的安全问题,2),3)的安全问题是和业务,组织机构相关的,所以必须程序编码解决。
严格上说,Acegi对1)点的解决也是不彻底的,因为它只解决了服务端的程序资源访问控制,操作界面上的元素是要我们编码实现的。不过,这也好理解,因为界面的入口元素是最灵活多样的,Acegi不应该涉足。
所以我觉得Acegi在一个很适合的领域时,很好的解决了一些适合框架解决的问题,它不贪恋那些不容易框架实现而需求变化大多的问题。
1. 实例级权限控制 Acegi 通过 ACL 实现, 虽然使用上不太方便, 但它是标准的方案
2. 属性级权限控制还没听有通用的方案
3. 界面上通过 auth tag 实现控制, 一般的需求足够用了, 太特殊的也不是 security framework 管辖的范畴
4. 限登录 ip, 时间, 次数本身也不是难点, 新的版本应该会提供
2 楼
quaff
2006-11-05
Feiing 写道
stamen 写道
Acegi由于和业务无关,所以只能解决1)点的安全问题,2),3)的安全问题是和业务,组织机构相关的,所以必须程序编码解决。
严格上说,Acegi对1)点的解决也是不彻底的,因为它只解决了服务端的程序资源访问控制,操作界面上的元素是要我们编码实现的。不过,这也好理解,因为界面的入口元素是最灵活多样的,Acegi不应该涉足。
所以我觉得Acegi在一个很适合的领域时,很好的解决了一些适合框架解决的问题,它不贪恋那些不容易框架实现而需求变化大多的问题。
1. 实例级权限控制 Acegi 通过 ACL 实现, 虽然使用上不太方便, 但它是标准的方案
2. 属性级权限控制还没听有通用的方案
3. 界面上通过 auth tag 实现控制, 一般的需求足够用了, 太特殊的也不是 security framework 管辖的范畴
4. 限登录 ip, 时间, 次数本身也不是难点, 新的版本应该会提供
4.可以限制同时登录次数,详情参考springside
仿照这个写一个登录ip和时间限制的plugin一点都不难
3 楼
stamen
2006-11-05
谢谢指正,继续学习。
4 楼
realzn
2006-11-06
控制ip,自己写代码
public class UserAuthenticationProcessingFilter extends AuthenticationProcessingFilter {
......
String ip = request.getRemoteAddr();
.......
Authentication authResult = getAuthenticationManager().authenticate(authRequest);
if (authResult != null && authResult.getPrincipal() instanceof UserDetails) {
UserDetails ud = (UserDetails) authResult.getPrincipal();
User user = userManager.getUserByLoginidAndPasswd(ud.getUsername(), ud.getPassword());
if (!user.getIp().equals(ip)) {
throw new IpAuthenticationException("ip没有授权");
}
}
}
。。。。
)
public class UserAuthenticationProcessingFilter extends AuthenticationProcessingFilter {
......
String ip = request.getRemoteAddr();
.......
Authentication authResult = getAuthenticationManager().authenticate(authRequest);
if (authResult != null && authResult.getPrincipal() instanceof UserDetails) {
UserDetails ud = (UserDetails) authResult.getPrincipal();
User user = userManager.getUserByLoginidAndPasswd(ud.getUsername(), ud.getPassword());
if (!user.getIp().equals(ip)) {
throw new IpAuthenticationException("ip没有授权");
}
}
}
。。。。
)
5 楼
kimfly
2006-11-06
acegi中的acl不就是为了解决domain object的授权问题而提出的吗,我看了下,应该可以解决行级数据控制 即可以可以访问哪些数据行,一般的限制项是数据所属单位,当然这里面不包括具体逻辑的东西,如与创建者相关的信息等。