Frage

Ich bin mit Wicket mit dem Wicket Auth-Projekt für meine Präsentationsschicht und ich habe integriert daher es mit Frühling Sicherheit. Dies ist die Methode, die von Wicket für die Authentifizierung für mich genannt wird:

@Override
public boolean authenticate(String username, String password) {
    try {
        Authentication request = new UsernamePasswordAuthenticationToken(
                username, password);
        Authentication result = authenticationManager.authenticate(request);
        SecurityContextHolder.getContext().setAuthentication(result);
    } catch (AuthenticationException e) {
        return false;
    }
    return true;
}

Der Inhalt (innen) meine Spring Security XML-Konfiguration ist:

<http path-type="regex">
    <form-login login-page="/signin"/>
<logout logout-url="/logout" />
</http>
<global-method-security secured-annotations="enabled" />
<authentication-manager alias="authenticationManager"/>
<authentication-provider user-service-ref="userService">
    <password-encoder ref="bcryptpasswordencoder" />
</authentication-provider>

Der Abschnitt

Andere Tipps

Sie werden in der Tat offen zu Sitzung Fixierungen Angriffe. Um dies zu beheben könnte man wieder durch den Frühling Code „inspiriert“ werden. Um eine neue Sitzung erstellen Sie natürlich Zugang zum Http brauchen so müssen Sie unter Umständen einige Umgestaltung tun.

Wenn Sie sehen, die Methode SessionUtils .startNewSessionIfRequired.

Damit wird die Authentifizierung auf eine neue Sitzung migrieren. Sie könnten diese Methode der Lage sein, direkt zu nennen oder auch nur den Code ein wenig Refactoring.

Wie für programmatische Logout können Sie nicht zu weit schief gehen, indem Sie einfach session.invalidate() rufen, wenn Sie die Person, um sich abzumelden müssen. Dies wird notwendig, aus einer allgemeinen Perspektive der Sicherheit alles tun, aber beachten Sie, obwohl Sie einige Dinge auf der Sitzung zur Reinigung benötigen. Wenn Sie einen sehr komplizierten Satz von Filtern usw. haben, und Sie müssen sicherstellen, dass der Benutzer für den Rest aus der Anforderung angemeldet ist, dann können Sie hinzufügen:

SecurityContextHolder.getContext().setAuthentication(null);

Wie für das Abfangen von der URL Sie sie einfach auf etwas einstellen könnte ungenutzt und es ignorieren! Ich bin mir nicht sicher, ob Sie das Abhören in der Konfiguration deaktivieren können - wenn Sie wirklich entfernen möchten es dann am AuthenticationProcessingFilter einen Blick - Sie diese anpassen können. Wenn Sie dies tun, dann haben Sie die Feder Sicherheit xml manuell Setup und nicht die bereitgestellten Namespaces verwenden. Es ist nicht zu hart, aber - bei einigen älteren Dokumentation aussehen und Sie werden sehen, wie dies zu tun.

Hope, das hilft!

1) Programmatische Logout

  1. nennen HttpServletRequest.getSession (false) .invalidate
  2. rufen SecurityContextHolder.clearContext ()

2) Spring Security nicht sagen, bestimmte URLs abfangen, diese Art hängt von ab, wie Ihre Anwendung URL Raum-Setup. Wenn alle Seiten (außer / An- und / Logout) im Kontext / myApp lebten dann könnte man dies tun:

<http ....>
  <intercept-url pattern="/myApp/**" ..>
 ....
</http>

Ich hatte ein Problem mit dem programmatischen Login. Ich rief alle authenticationManager.authenticate(...) und SecurityContextHolder.getContext().setAuthentication(...) Methoden aber einige Probleme mit der Session hatte. Ich hatte die folgenden Zeilen hinzufügen, um richtig die Sitzung zu verwalten:

HttpSession session = request.getSession();
session.setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext());

Dies war aus dem Beispielcode oben gepostet nicht klar. Weitere Blick auf http://forum.springsource.org/showthread.php?t=69761

programmatische Abmeldung zu tun, es ist auch möglich, ein org.springframework.security.core.AuthenticationException zu werfen. Zum Beispiel SessionAuthenticationException. In diesem Fall ExceptionTranslationFilter initiieren Logout.

Sie können versuchen, diese

    try {
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }

        SecurityContextHolder.clearContext();

    } catch (Exception e) {
        logger.log(LogLevel.INFO, "Problem logging out.");
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top