* Authorization service with persistent storage.
* This is a wrapper for {@link org.wamblee.security.authorization.DefaultAuthorizationService}
* which refreshes the state of the service at certain time intervals.
+ *
+ * @author Erik Brakkee
*/
public class PersistentAuthorizationService extends AbstractPersistent
implements AuthorizationService {
/**
* Authorization service to use.
*/
- private DefaultAuthorizationService _service;
+ private DefaultAuthorizationService service;
/**
* Hibernate template to use.
*/
- private HibernateTemplate _template;
+ private HibernateTemplate template;
/**
* User accessor.
*/
- private UserAccessor _userAccessor;
+ private UserAccessor userAccessor;
/**
* Name of the service.
*/
- private String _name;
+ private String name;
/**
* Refresh interval in milliseconds.
*/
- private final long _refreshInterval;
+ private final long refreshInterval;
/**
* Last refresh time.
*/
- private long _lastRefreshTime;
+ private long lastRefreshTime;
/**
* Constructs the persistent service.
public PersistentAuthorizationService(String aName,
HibernateTemplate aTemplate, UserAccessor aAccessor,
long aRefreshInterval) {
- _template = aTemplate;
- _refreshInterval = aRefreshInterval;
- _lastRefreshTime = System.currentTimeMillis();
- _userAccessor = aAccessor;
- _name = aName;
+ template = aTemplate;
+ refreshInterval = aRefreshInterval;
+ lastRefreshTime = System.currentTimeMillis();
+ userAccessor = aAccessor;
+ name = aName;
}
/**
* Initialize service if needed.
*/
private void initialize() {
- if (_service == null) {
- List<DefaultAuthorizationService> result = _template
+ if (service == null) {
+ List<DefaultAuthorizationService> result = template
.findByNamedQueryAndNamedParam(FIND_QUERY, NAME_PARAM,
- _name);
+ name);
if (result.size() > 1) {
throw new IllegalArgumentException(
- "Returned more than one service for name '" + _name
+ "Returned more than one service for name '" + name
+ "' (" + result.size() + ")");
}
if (result.size() == 0) {
- _service = new DefaultAuthorizationService(_userAccessor, _name);
- _template.persist(_service);
+ service = new DefaultAuthorizationService(userAccessor, name);
+ template.persist(service);
} else {
- _service = result.get(0);
- _service.setUserAccessor(_userAccessor);
+ service = result.get(0);
+ service.setUserAccessor(userAccessor);
}
}
}
public boolean isAllowed(Object aResource, Operation aOperation) {
initialize();
refresh();
- return _service.isAllowed(aResource, aOperation);
+ return service.isAllowed(aResource, aOperation);
}
/* (non-Javadoc)
public <T> T check(T aResource, Operation aOperation) {
initialize();
refresh();
- return _service.check(aResource, aOperation);
+ return service.check(aResource, aOperation);
}
/*
public AuthorizationRule[] getRules() {
initialize();
refresh();
- return _service.getRules();
+ return service.getRules();
}
/*
public void appendRule(AuthorizationRule aRule) {
initialize();
refresh();
- _service.appendRule(aRule);
+ service.appendRule(aRule);
save();
}
public void removeRule(int aIndex) {
initialize();
refresh();
- _service.removeRule(aIndex);
+ service.removeRule(aIndex);
save();
}
public void insertRuleAfter(int aIndex, AuthorizationRule aRule) {
initialize();
refresh();
- _service.insertRuleAfter(aIndex, aRule);
+ service.insertRuleAfter(aIndex, aRule);
save();
}
*/
private synchronized void refresh() {
long time = System.currentTimeMillis();
- if ( time - _lastRefreshTime > _refreshInterval ) {
- _template.refresh(_service);
- _lastRefreshTime = time;
+ if ( time - lastRefreshTime > refreshInterval ) {
+ template.refresh(service);
+ lastRefreshTime = time;
}
}
* Saves any changes to the service state if necessary.
*/
private void save() {
- HibernateSupport.merge(_template, _service);
+ HibernateSupport.merge(template, service);
}
}