Blog

Eine andere Benutzerrolle mit ACEGI spielen

Aktualisiert Oktober 23, 2025
3 Minuten
Vor kurzem hatten wir in einem unserer Projekte die Anforderung, dem ROLE_ADMIN zu erlauben, sich als ein anderer Benutzer anzumelden, ohne das Passwort dieses Benutzers zu kennen oder zu ändern. Zum Beispiel hat 'Jack' die ROLE_ADMIN und 'Suzy' hat die ROLE_USER. Nun möchte sich 'Jack' als 'Suzy' anmelden, ohne ihr Passwort zu kennen, und einige Aufgaben in ihrem Namen ausführen, wenn 'Suzy' nicht verfügbar ist und einige Arbeiten erledigt werden müssen. Natürlich sollten Sie einen Mechanismus zur Prüfung und Protokollierung bereitstellen, wann immer 'Jack' eine andere Rolle spielen möchte.Dies ist mit Acegi recht einfach zu implementierenDer SwitchUserProcessingFilter in Acegi hilft Ihnen, diese Funktionalität zu erreichen. Die folgenden Schritte zeigen Ihnen, wie Sie ihn konfigurieren und verwenden 1. Nehmen Sie in die Filterkette für acegi den Filter SwitchUserProcessingFilter als [xml] CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /images/**=#NONE# /scripts/**=#NONE# /styles/**=#NONE# / **=httpSessionContextIntegrationFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter, anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor,switchUserProcessingFilter [/xml] Stellen Sie sicher, dass dieser Filter NACH filterInvocationInterceptor und FilterSecurityInterceptor platziert wird, da sonst jede Rolle in der Lage wäre, "Rollenspiel" zu machen und nicht die Rolle ROLE_ADMIN. Denken Sie daran, dass es sich um eine Filterverkettung handelt. 2. Definieren Sie die Bean-Definition für SwitchUserProcessingFilter als [xml] /j_acegi_switch_user /j_acegi_exit_user /mainMenu.html [/xml] hier müssen Sie nur die targetUrl ändern, je nachdem, wohin Sie nach dem SWITCH gehen müssen. userDao ist die Dao, die Sie für Ihren daoAuthenticationProvider verwenden [xml] [/xml] 3. Achten Sie in Ihrem filterInvokationFilter darauf, den Zugriff nur für ROLE_ADMIN einzuschränken, denn Sie möchten bestimmt nicht, dass sich alle Ihre Benutzer als jemand anderes anmelden. [xml] PATTERN_TYPE_APACHE_ANT ...... ...... /j_acegi_switch_user*=ROLE_ADMIN [/xml] 4. Wenn der ROLE_ADMIN nun als ein anderer Benutzer ein Rollenspiel durchführen möchte, meldet er sich mit seinem Benutzernamen und Passwort an. Dann sollte es einen Link mit folgendem Inhalt geben https://xebia.com/blog:8080/j_acegi_switch_user?j_username=vikas wobei 'vikas' der Benutzername des Benutzers ist, als den der ROLE_ADMIN spielen möchte. Da nur der ROLE_ADMIN diesen Link sehen darf, können Sie die Acegi-Taglibs verwenden, um den Link nur für ROLE_ADMIN verfügbar zu machen [xml] <> [/xml] Bei einem erfolgreichen Wechsel wird der SecurityContextHolder des Benutzers aktualisiert, um den angegebenen Benutzer widerzuspiegeln und enthält außerdem eine zusätzliche SwitchUserGrantedAuthority, die den ursprünglichen Benutzer enthält. Um einen Benutzerkontext zu verlassen, muss der Benutzer dann auf eine URL zugreifen (siehe exitUserUrl), die zum ursprünglichen Benutzer zurückwechselt, der durch die SWITCH_USER_GRANTED_AUTHORITY identifiziert wird. https://xebia.com/blog:8080/j_acegi_exit_user Dies würde den ROLE_ADMIN zu seinem eigenen Konto bringen. Ein verschachtelter Wechsel und Ausgang ist ebenfalls möglich. Das heißt, wenn Jack und Suzy beide ROLE_ADMIN haben, kann Jack zu Suzy wechseln, die wiederum zu John wechseln kann. Sobald der Benutzer den Bereich von John verlässt, gelangt er zu Suzy und dann bei einem weiteren Ausgang wieder zu Jack. Fazit: Die Benutzerumschaltung kann mit Acegi leicht konfiguriert werden. Denken Sie jedoch daran, dass mit großer Macht auch große Verantwortung einhergeht, also nutzen Sie diese Möglichkeit mit Vorsicht.

Contact

Let’s discuss how we can support your journey.