动态配置Acegi权限

AbstractRefreshableTargetSource在spring2.0里面才有

[code]
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.acegisecurity.intercept.web.FilterInvocationDefinitionSourceEditor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.aop.target.dynamic.AbstractRefreshableTargetSource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceEditor;

public class RefreshableFileFilterInvocationDefinition extends
AbstractRefreshableTargetSource {
protected Log logger = LogFactory.getLog(getClass());
public static final String DEFAULT_LOCATION = "classpath:acegi-filterInvocation.conf";
private String location = DEFAULT_LOCATION;
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
protected Object freshTarget() {
ResourceEditor editor = new ResourceEditor();
editor.setAsText(getLocation());
Resource resource = (Resource) editor.getValue();
if (resource == null) {
logger
.warn("Can't find a Acegi FilterInvocationDefinition config file");
return null;
}
StringBuffer sb = new StringBuffer();
char[] cbuf = new char[100];
int read;
InputStream is = null;
InputStreamReader isr = null;
try {
is = resource.getInputStream();
isr = new InputStreamReader(is);
while ((read = (isr.read(cbuf, 0, cbuf.length))) != -1)
sb.append(cbuf, 0, read);
logger.info("loaded Acegi FilterInvocationDefinition config file");
} catch (IOException e) {
logger.warn(e.getMessage(), e);
} finally {
try {
if (isr != null)
isr.close();
if (is != null)
is.close();
} catch (IOException e) {
logger.warn(e.getMessage(), e);
}
}
FilterInvocationDefinitionSourceEditor configEditor = new FilterInvocationDefinitionSourceEditor();
configEditor.setAsText(sb.toString());
return configEditor.getValue();
}

}
[/code]

acegi的spring配置文件

<bean id="filterInvocationInterceptor"
class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager"
ref="authenticationManager" />
<property name="accessDecisionManager"
ref="httpRequestAccessDecisionManager" />
<property name="objectDefinitionSource"
ref="objectDefinitionSource" />
</bean>

<bean id="refreshableFileFilterInvocationDefinition"
class="RefreshableFileFilterInvocationDefinition">
<property name="location" value="file:///${webapp.root}/WEB-INF/acegi-filterInvocation.conf"/>
<!-- 自动刷新
<property name="refreshCheckDelay" value="60000"/>
-->
</bean>

<bean id="objectDefinitionSource"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource"
ref="refreshableFileFilterInvocationDefinition" />
</bean>


也可以用dwr来手动刷新,并且配置权限,role是在acegi里面配置的

<create creator="spring" javascript="FilterInvocationDefinition"
scope="application">
<param name="beanName" value="refreshableFileFilterInvocationDefinition" />
<auth method="refresh" role="ROLE_SUPERVISOR"/>
<include method="refresh" />
</create>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值