-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSecurityUtils.java
More file actions
57 lines (48 loc) · 2.19 KB
/
Copy pathSecurityUtils.java
File metadata and controls
57 lines (48 loc) · 2.19 KB
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
package ch.fhnw.timerecordingbackend.security;
import ch.fhnw.timerecordingbackend.model.User;
import ch.fhnw.timerecordingbackend.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
/**
* Utility-Klasse zur Ermittlung des aktuell authentifizierten Benutzers
* Stellt Methoden für Username- und Benutzerobjektzugriff bereit
* @author FA
* Code von anderen Teammitgliedern oder Quellen wird durch einzelne Kommentare deklariert
*/
@Component
public class SecurityUtils {
@Autowired
private UserRepository userRepository;
/**
* Gibt die E-Mail-Adresse des aktuell authentifizierten Benutzers zurück
* Falls kein Benutzer authentifiziert ist, wird null zurückgegeben
*/
public String getCurrentUsername() {
// Holt das Authentication-Objekt aus dem aktuellen SecurityContext
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// Gibt null zurück, wenn keine Authentifizierung vorhanden oder Benutzer nicht eingeloggt
if (authentication == null || !authentication.isAuthenticated()) {
return null;
}
// Der principal enthält den Benutzer
Object principal = authentication.getPrincipal();
// Gibt die E-Mail-Adresse zurück, wenn der principal ein UserDetails-Objekt ist
if (principal instanceof UserDetails) {
return ((UserDetails) principal).getUsername();
}
// Fallback für andere Principal-Typen
return principal.toString();
}
/**
* Gibt das vollständige User-Objekt des aktuell angemeldeten Benutzers zurück,
* oder null, falls kein Benutzer angemeldet ist oder der Benutzer nicht gefunden wurde
*/
public User getCurrentUser() {
String email = getCurrentUsername(); // E-Mail abrufen
return userRepository.findByEmail(email)
.orElse(null); // Null, falls Benutzer nicht gefunden
}
}