整合 DWR 和 Acegi 是为了保护 bean 方法调用
在此之前有必须熟悉 spring 和 acegi,我就不解释 acegi 的配置了,您可以从 acegi 网站下载最新版本。
问题提出我们必须保护一个 bean,通过 DWR 设置“exposed”。
Acegi 是一个基于 Spring 的安全机制的框架,这个例子告诉你如何去阻止通过网页访问一个 bean 方法, 如果它没有权限的。
在 dwr.xml 里,在没有 acegi 保护下,我们这样声明 bean
在 Spring 配置文件里,这个 addLoan 方法被网页调用,这个 loadDWR bean 是一个 Spring 管理的 bean
解决方案
然后我们怎么去阻止没有权限的访问 loanDWR.addLoan 这个方法呢?如下所示:
- 创建一个安全机制的拦截器
fr.iremia.jlab.web.dwr.LoanDWR.addLoan=edit,admin
LoanDWR.addLoan 方法,只能被管理员或者有修改角色权限的用户 edit 调用
想要了解 acegi 的属性:authenticationManager 和 httpRequestAccessDecisionManager,请参考 http://acegisecurity.org/docbook/acegi.html
- 为 bean 创建一个代理 给原有的 loanDWR Spring bean 添加一个代理,使用 Spring proxyfactorybean:
现在,loadDWRSecure 是个代理被 loanDWR 调用,每个调用 addLoan 方法将被 Acegi 拦截,只有拥有权限的用户才能调用
- 修改 dwr 配置文件
我们现在需要修改