Wenn Sie eine Anfrage an die API mit den Anmeldeinformationen des Benutzers aus der Keycloak-Authentifizierung stellen Vom Intercepter vor wird die Methode der Controller-Klasse aufgerufen Beachten Sie, dass es mir schwer fiel, nicht zu wissen, dass es eine getUserPrincipal () -Methode gibt, um Benutzerinformationen abzurufen.
intercepterTestClass.java
@Autowired
private UserDto userDto;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//
//Wenn Sie nicht über Ihre Anmeldeinformationen verfügen
if (request.getUserPrincipal() == null) {
System.out.println("Dummy-Einstellung, da keine Authentifizierungsinformationen vorhanden sind");
userDto.setUserid("U0001");
userDto.setUserName("guest");
return true;
}
//
final KeycloakSecurityContext context = KeycloakPrincipal.class.cast(request.getUserPrincipal()).getKeycloakSecurityContext();
userDto.setUserName(context.getToken().getPreferredUsername());
userDto.setUserId(String.valueOf(context.getToken().getOtherClaims().get("user_id")));
//
return true;
Weitere Informationen zur Implementierung der Keycloak-Authentifizierung finden Sie in einem anderen Artikel. Indem Sie die Anmeldeinformationen beim Abfangjäger abrufen Die Vielseitigkeit hat sich verbessert, da sie nicht mehr in jeder Controller-Klasse beschrieben werden muss. Bisher habe ich Spring Security nur als Authentifizierungsfunktion verwendet. Spring Security scheint für die API-Implementierung nicht sehr geeignet zu sein.
Recommended Posts