i want to manage my services in database(oracle), in order to restrict the url to access cas server and i init successed like this init services from database
@Bean
void initServiceManager() {
String sql = "select * from fgg_app";
List<AppEntity> apps = null;
try {
apps= jdbcTemplate.query(sql, new Object[]{}, new BeanPropertyRowMapper<AppEntity>(AppEntity.class));
if(apps!=null && apps.size()>0)
{
for(AppEntity app:apps){
String clientId = app.getSystemId();
String clientSecret =app.getSystemSecret();
String restrictingAccessUrl=app.getRestrictingAccessUrl();
String name =app.getName();
ServiceManagerUtil.addOrUpdateService(servicesManager, clientId, clientSecret,name, restrictingAccessUrl);
}
servicesManager.deleteAll();
servicesManager.load();
Collection<RegisteredService> registeredServices = servicesManager.getAllServices();
System.out.println(registeredServices.size());
}
} catch (Exception e) {
System.out.println("error");
}
}
save url function
public static void addOrUpdateService(ServicesManager servicesManager, String clientId, String clientSecret,String name, String restrictingAccessUrl)
{
Collection<RegisteredService> registeredServices = servicesManager.getAllServices();
System.out.println(registeredServices.size());
System.out.println("断点4");
Iterator<RegisteredService> iterator = registeredServices.iterator();
while (iterator.hasNext()){
RegisteredService registeredService = iterator.next();
if (registeredService.getName().equals(clientId)) {
Long id = servicesManager.findServiceByName(clientId).getId();
servicesManager.delete(id);
iterator.remove();
}
}
servicesManager.load();
System.out.println(servicesManager.getAllServices().size());
System.out.println("断点5");
List<String> serviceIds = getServiceId(restrictingAccessUrl);
String service = null;
if(serviceIds!=null && serviceIds.size()>0)
{
for (String serviceId:serviceIds)
{
service = "^(https|imaps|http)://" + serviceId + ".*";
addOAuthRegisteredService(servicesManager,clientId, clientSecret, name, service, serviceId);
addRegexRegisteredService(servicesManager,clientId,name, service, serviceId);
}
}
else
{
service = "^(https|imaps|http)://.*";
addOAuthRegisteredService(servicesManager,clientId, clientSecret, name, service, null);
addRegexRegisteredService(servicesManager,clientId,name, service, null);
}
System.out.println(registeredServices.size());
System.out.println("断点6");
}
private static void addRegexRegisteredService(ServicesManager servicesManager, String clientId, String name, String service, String serviceId){
RegexRegisteredService regexRegisteredService = regexRegisteredService = new RegexRegisteredService();
regexRegisteredService.setServiceId(service);
regexRegisteredService.setDescription(name);
ReturnAllAttributeReleasePolicy re = new ReturnAllAttributeReleasePolicy();
regexRegisteredService.setAttributeReleasePolicy(re);
regexRegisteredService.setName(clientId);
if(StrUtil.isNotBlank(serviceId))regexRegisteredService.setLogoutUrl("(https|http)://" + serviceId);
servicesManager.save(regexRegisteredService);
}
but i find it was failed while i delete services, and i execute servicesManager.load().The old services and new services all loaded success. and my services increase without decrease.