I am trying to set authorizations in code, but the scanner is always returning 
the previous fetch of data using the previous authorizations.  I am setting the 
Authorizations on the Connector, and then I get a new Scanner after setting the 
Authorizations.
        
        public Authorizations setAuthorizations(SecurityGroup[] authorizations) 
{
                List<byte[]> authorizationList = new ArrayList<byte[]>();
                
                for (SecurityGroup auth : authorizations) {
                        String groupString = Security.getName(auth);
                        
                        byte[] groupBytes = groupString.getBytes();
                        
                        authorizationList.add(groupBytes);
                }
                
                Authorizations auths = new Authorizations(authorizationList);
                
                try {
                        
connector.securityOperations().changeUserAuthorizations(_loggedInUser, auths);
                        
                        return auths;
                } catch (AccumuloException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (AccumuloSecurityException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                
                return null;
        }
        
        public Scanner getScanner() {
                try {
                        Authorizations auths = this.getAuthorizations();
                    
                        return connector.createScanner(TABLE, auths);
                } catch (TableNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        
                return null;
        }
        
        @Override
        public Collection<Plate> filter(SecurityGroup[] authorizations, String 
regEx) {
                _db.setAuthorizations(authorizations);
                
                Scanner scanner = _db.getScanner();

                String valueRegex = (regEx.equals("")) ? ".*" : regEx + ".*";
        
                scanner.fetchColumn(Plate.COLUMN_FAMILY, new 
Text(Plate.PLATE_QUALIFIER));
        
                IteratorSetting iter = new IteratorSetting(1, "regexfilter", 
RegExFilter.class);
        
                iter.addOption(RegExFilter.VALUE_REGEX, valueRegex);
        
                scanner.addScanIterator(iter);
                
                Iterator<Entry<Key, Value>> it = scanner.iterator();
                
                Map<Text, Plate> map = new HashMap<Text, Plate>();
            
                while (it.hasNext()) {
                        Entry<Key,Value> entry = it.next();
                    
                        Text rowId = entry.getKey().getRow();
                    
                        if (map.containsKey(rowId)) {
                                continue;
                        }
                    
                        Plate plate = new Plate(Plate.getMap(rowId, scanner));
                    
                        map.put(rowId, plate);
                }
                
                return map.values();
        }

Reply via email to