2016-05-17 6 views
0

Ich habe eine Komponente erstellt, die Wetterinformationen von einer Drittanbieter-Quelle (openweathermap.org/api) mithilfe ihrer freien API anzeigt. Dazu habe ich ein Servlet erstellt und über Maven Build auf AEM hochgeladen. Die Komponente funktioniert einwandfrei und ruft die Details nach Bedarf ab.Admin nur zum Ändern/Bearbeiten bestimmter API-Schlüssel einer AEM-Komponente

Da Sie ein APIKey verwenden, sollte Ihre Site das Ändern/Aktualisieren des Schlüssels ohne Codeänderung ermöglichen und sofort aktiviert werden, ohne dass CQ neu gestartet werden muss. - Nur Administratoren sollten in der Lage sein, dies zu tun, Autoren sollten nicht sehen oder sich um einen Schlüssel kümmern.

Referenz Link: system/console permissions

Ich habe durch viele Foren gewesen, aber keine Hilfe. Ich bin mir sicher, dass wir in http://localhost:4502/system/console/configMgr arbeiten müssen - aber welcher Teil und was sich ändert ist nicht sicher. Außerdem, wie das Servlet mit dem geänderten API-Schlüssel ausgelöst wird. Vielen Dank im Voraus

Antwort

0

Sie können einen konfigurierbaren OSGI-Dienst erstellen. Der API-Schlüssel ist dann eine Eigenschaft dieses Dienstes, die von den Admins der Felix-Konsole geändert werden kann.

Zum Erstellen von OSGI-Services sollten Sie die Felix SCR-Annotationen verwenden und diese während Ihres Maven-Build-Prozesses verarbeiten, um die entsprechenden Deployment-Deskriptoren zu generieren. Hier ist ein einfaches Beispiel.

@Component(immediate=true, label="Weather Service", description="My weather service", metatype=true) 
@Service(value=WeatherService.class) 
public class WeatherServiceImpl implements WeatherService { 

    @Override 
    public String getWeatherInfo() { 
     return null; // call the weather api here 
    } 
} 

Verwenden Sie die @Property Anmerkung Ihre konfigurierbare Eigenschaft, wie unten und weisen Sie ihn in der Activate-Methode des Dienstes zu definieren, die, wenn sie aufgerufen wird der Dienst auf Bundle installieren aktiviert ist.

@Property(value="123456789") 
static final String WEATHER_API_KEY = "weather.api.key"; 

private String weatherAPIKey; 


@Activate 
public void activate(final Map<String, Object> props) { 
    this.weatherAPIKey = (String)props.get(WEATHER_API_KEY); 
} 

Sie sollten Ihren konfigurierbaren Dienst danach in der Felix-Konsole sehen.

Bei den Berechtigungen sollten die Autoren keine Berechtigung für die Felix-Konsole haben. Nur Admins sollten darauf zugreifen können.