1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| import org.springframework.security.acls.jdbc.JdbcMutableAclService;
import org.springframework.security.acls.jdbc.LookupStrategy;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.acls.domain.GrantedAuthoritySid;
import org.springframework.security.acls.domain.PrincipalSid;
import org.springframework.security.acls.domain.ObjectIdentityImpl;
import org.springframework.security.acls.model.AclCache;
import org.springframework.security.acls.model.ObjectIdentity;
import org.springframework.security.acls.model.Sid;
import javax.sql.DataSource;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CustomJdbcMutableAclService extends JdbcMutableAclService{
private final static String SELECT_EXISTING_BY_CLASS_AND_SID =
"SELECT " +
"acl_object_identity.object_id_identity " +
"FROM acl_object_identity " +
"INNER JOIN acl_entry on acl_entry.acl_object_identity = acl_object_identity.id " +
"INNER JOIN acl_class on acl_class.id = acl_object_identity.object_id_class " +
"INNER JOIN acl_sid on acl_entry.sid = acl_sid.id " +
"WHERE acl_class.class = ? AND acl_sid.sid = ? AND acl_entry.granting = 1";
public CustomJdbcMutableAclService(DataSource dataSource, LookupStrategy lookupStrategy, AclCache aclCache){
super( dataSource, lookupStrategy, aclCache);
}
public List<ObjectIdentity> getExistingObjectIdentities(String type, Sid sid) {
String sidName = getSidName(sid);
List<Map<String, Object>> results = jdbcTemplate.queryForList(SELECT_EXISTING_BY_CLASS_AND_SID, type, sidName);
List<ObjectIdentity> oids = new ArrayList<>();
for (Map<String, Object> result : results) {
oids.add(new ObjectIdentityImpl(type, (Serializable) result.get("object_id_identity")));
}
return oids;
}
private String getSidName(Sid sid) {
String sidName;
if (sid instanceof PrincipalSid) {
sidName = ((PrincipalSid) sid).getPrincipal();
} else if (sid instanceof GrantedAuthoritySid) {
sidName = ((GrantedAuthoritySid) sid).getGrantedAuthority();
} else {
throw new IllegalArgumentException("Unsupported implementation of Sid");
}
return sidName;
}
} |