how to manage cas apere services

Viewed 11

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");
    }
and next function

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.

0 Answers
Related