Der User-Agent-String ist eine Zeichenkette, die von einem Client (z. B. Browser oder Mobile-App) an den Server gesendet wird, um dessen Eigenschaften wie Gerätetyp, Betriebssystem, Browser und Version mitzuteilen. Die Analyse des User-Agent-Strings kann nützlich sein, um Inhalte oder Dienste gezielt an verschiedene Geräte anzupassen, Statistiken zu erstellen oder Sicherheitsfunktionen zu implementieren.
Die Library Yauaa (Yet Another User-Agent Analyzer) ist eine leistungsfähige und leicht integrierbare Open-Source-Bibliothek, die sich speziell für das Parsen und Analysieren von User-Agent-Strings eignet. In diesem Artikel zeige ich, wie die Yauaa-Library in eine Spring-Boot-Anwendung integriert wird und wie sie genutzt werden kann, um die User-Agent-Daten serverseitig auszuwerten.
1. Einführung in Yauaa
Yauaa bietet eine flexible Möglichkeit, User-Agent-Strings in strukturierte Daten umzuwandeln. Die Library liefert detaillierte Informationen über:
- Betriebssystem (inklusive Version)
- Browser (inklusive Version)
- Gerätetyp (z. B. Smartphone, Tablet, Desktop)
- Marke und Modell
- Bots oder Crawler (z. B. Googlebot)
Mit Yauaa lassen sich diese Informationen durch eine einfache API abrufen und weiterverarbeiten.
2. Integration in eine Spring-Boot-Anwendung
Schritt 1: Maven-Abhängigkeit hinzufügen
Um Yauaa in ein Spring-Boot-Projekt zu integrieren, muss die Abhängigkeit in der pom.xml
des Projekts hinzugefügt werden:
<dependency>
<groupId>nl.basjes.parse.useragent</groupId>
<artifactId>yauaa</artifactId>
<version>7.26</version>
</dependency>
Code-Sprache: HTML, XML (xml)
Schritt 2: Konfiguration der Yauaa-Instanz
Yauaa verwendet einen UserAgentAnalyzer
, der die User-Agent-Strings analysiert. Dieser kann als Bean in einer Spring-Boot-Anwendung definiert werden:
import nl.basjes.parse.useragent.UserAgentAnalyzer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class YauaaConfig {
@Bean
public UserAgentAnalyzer userAgentAnalyzer() {
return UserAgentAnalyzer.newBuilder().hideMatcherLoadStats().withCache(10000).build();
}
}
Code-Sprache: CSS (css)
Mit dieser Konfiguration wird ein UserAgentAnalyzer
erstellt, der einen internen Cache für bis zu 10.000 Einträge verwendet.
3. Auslesen des User-Agent-Strings in einem Controller
Um den User-Agent-String eines Requests auszulesen, kann der Wert des User-Agent
-Headers genutzt werden. Dies wird in einem Spring-Boot-Controller wie folgt umgesetzt:
import nl.basjes.parse.useragent.UserAgent;
import nl.basjes.parse.useragent.UserAgentAnalyzer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class UserAgentController {
private final UserAgentAnalyzer userAgentAnalyzer;
@Autowired
public UserAgentController(UserAgentAnalyzer userAgentAnalyzer) {
this.userAgentAnalyzer = userAgentAnalyzer;
}
@GetMapping("/user-agent")
public Map<String, String> parseUserAgent(@RequestHeader(value = "User-Agent", defaultValue = "Unknown") String userAgentHeader) {
UserAgent userAgent = userAgentAnalyzer.parse(userAgentHeader);
// Extrahieren einzelner Attribute
Map<String, String> userAgentDetails = new HashMap<>();
userAgentDetails.put("Browser", userAgent.getValue("AgentName"));
userAgentDetails.put("BrowserVersion", userAgent.getValue("AgentVersion"));
userAgentDetails.put("OS", userAgent.getValue("OperatingSystemName"));
userAgentDetails.put("OSVersion", userAgent.getValue("OperatingSystemVersion"));
userAgentDetails.put("DeviceClass", userAgent.getValue("DeviceClass"));
return userAgentDetails;
}
}
Code-Sprache: JavaScript (javascript)
Dieser Controller verarbeitet den User-Agent-Header eines HTTP-Requests und gibt die analysierten Details als JSON zurück.
4. Beispielausgabe und Verwendung
Wenn ein Client diesen Endpunkt aufruft, sendet er seinen User-Agent-String mit. Ein Beispielaufruf mit curl könnte so aussehen:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.134 Safari/537.36" http://localhost:8080/user-agent
Code-Sprache: JavaScript (javascript)
Die Ausgabe könnte etwa wie folgt aussehen:
{
"Browser": "Chrome",
"BrowserVersion": "114.0.5735.134",
"OS": "Windows",
"OSVersion": "10.0",
"DeviceClass": "Desktop"
}
Code-Sprache: JSON / JSON mit Kommentaren (json)
5. Erweiterung: Nutzung in der Anwendung
Die analysierten Daten können in der Anwendung vielfältig verwendet werden:
5.1. Anpassung von Inhalten
Abhängig vom Gerätetyp oder der Browser-Version können Inhalte dynamisch angepasst werden, z. B.:
- Desktop-Nutzer erhalten eine optimierte Desktop-Oberfläche.
- Mobile-Nutzer werden auf eine responsive Version umgeleitet.
5.2. Analyse und Monitoring
Die gesammelten Daten können in eine Datenbank geschrieben und zur Erstellung von Statistiken genutzt werden. Dies hilft, die Nutzung der Webanwendung besser zu verstehen und die Zielgruppe zu analysieren.
import org.springframework.web.bind.annotation.PostMapping;
@PostMapping("/log-user-agent")
public void logUserAgent(@RequestHeader(value = "User-Agent") String userAgentHeader) {
UserAgent userAgent = userAgentAnalyzer.parse(userAgentHeader);
// Beispiel: Speichern in der Konsole
System.out.println("Browser: " + userAgent.getValue("AgentName"));
System.out.println("OS: " + userAgent.getValue("OperatingSystemName"));
}
Code-Sprache: JavaScript (javascript)
5.3. Sicherheitsmaßnahmen
Crawler oder verdächtige User-Agent-Strings können erkannt und blockiert werden. Dies wird oft verwendet, um Bots von geschützten Bereichen fernzuhalten.
6. Fazit
Die Yauaa-Library ist ein einfach zu verwendendes Werkzeug, das in Spring-Boot-Anwendungen mühelos integriert werden kann. Sie ermöglicht eine präzise Analyse von User-Agent-Strings und liefert wertvolle Informationen über die Clients einer Webanwendung. Mit diesen Daten können Entwickler Inhalte gezielt anpassen, Statistiken erstellen oder Sicherheitsmaßnahmen implementieren. Dank der Flexibilität und Performance von Yauaa eignet sich die Library sowohl für kleine Projekte als auch für große, skalierbare Systeme.