Wie aktiviere ich die Protokollierung für Spring Security?

93

Ich richte Spring Security für die Anmeldung von Benutzern ein. Ich habe mich als Benutzer angemeldet und werde nach erfolgreicher Anmeldung zu einer Fehlerseite mit Zugriffsverweigerung weitergeleitet. Ich weiß nicht, welche Rollen meinem Benutzer tatsächlich zugewiesen wurden oder welche Regel dazu führt, dass der Zugriff verweigert wird, da ich nicht herausfinden kann, wie das Debuggen für die Spring Security-Bibliothek aktiviert werden kann.

Meine Sicherheits-XML:

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >
    <!-- security -->

    <security:debug/><!-- doesn't seem to be working -->

    <security:http auto-config="true">

        <security:intercept-url pattern="/Admin**" access="hasRole('PROGRAMMER') or hasRole('ADMIN')"/>
        <security:form-login login-page="/Load.do"
            default-target-url="/Admin.do?m=loadAdminMain"
            authentication-failure-url="/Load.do?error=true"
            username-parameter="j_username"
            password-parameter="j_password"
            login-processing-url="/j_spring_security_check"/>
        <security:csrf/><!-- enable Cross Site Request Forgery protection -->
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:jdbc-user-service data-source-ref="loginDataSource"
                users-by-username-query="SELECT username, password, active FROM userinformation WHERE username = ?"
                authorities-by-username-query="
                    SELECT ui.username, r.rolename 
                    FROM role r, userrole ur, userinformation ui 
                    WHERE ui.username=? 
                    AND ui.userinformationid = ur.userinformationid 
                    AND ur.roleid = r.roleid "
            />
            <security:password-encoder hash="md5"/>
        </security:authentication-provider>
    </security:authentication-manager>
</beans>

Ich habe auch versucht log4j.logger.org.springframework.security=DEBUG, meine log4j.properties zu erweitern

Wie kann ich eine Debug-Ausgabe für Spring Security erhalten?

Martin Carney
quelle
2
Überprüfen Sie diesen Link, wenn dies Ihnen helfen kann.
Pise
1
@pise Kannst du das als Antwort hinzufügen (mit mindestens einem relevanten Auszug / einer Zusammenfassung), damit ich dies als gelöst markieren kann?
Martin Carney
Siehe die Antwort auf diese Frage: stackoverflow.com/questions/7840088/…
nevster
Heh - hat versucht, es als Antwort hinzuzufügen und SO hat es in einen Kommentar umgewandelt.
Nevster

Antworten:

169

Angenommen, Sie verwenden Spring Boot, können Sie Folgendes in Ihr Feld einfügen application.properties:

logging.level.org.springframework.security=DEBUG

Dies gilt auch für die meisten anderen Federmodule.

Wenn Sie Spring Boot nicht verwenden, versuchen Sie, die Eigenschaft in Ihrer Protokollierungskonfiguration festzulegen, z. B. Logback.

Hier ist auch die application.yml-Version:

logging:
  level:
    org:
      springframework:
        security: DEBUG
delucasvb
quelle
2
Nimmt dies Spring Boot an?
John Camerin
1
@ JohnCamerin Ja, das tut es. Das Festlegen der Anmeldeebenen application.propertiesist eine Spring Boot-Funktion. Wenn Sie Spring Boot nicht verwenden, können Sie die Protokollstufe auf org.springframework.securityandere Weise festlegen (z. B. in Ihrer logback.xml).
Dario Seidl
1
Für WebFlux funktioniert es nicht: github.com/spring-projects/spring-security/issues/5758
bzhu
Hinzufügen org.springframework.web.cors, um Cors-Prozessorprotokolle zu aktivieren.
Siggen
69

Sie können die Debugging-Unterstützung einfach aktivieren, indem Sie eine Option für die @EnableWebSecurityAnmerkung verwenden:

@EnableWebSecurity(debug = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    …
}
Michael Piefel
quelle
Wie wäre es EnableWebFluxSecurity, es hat nicht die Debug-Option
bzhu
1
Ah, interessant. Ich habe jedoch keine Erfahrung mit WebFlux.
Michael Piefel
1
Gibt
25

Das grundlegende Debuggen mit Spring DebugFilterkann folgendermaßen konfiguriert werden:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.debug(true);
    }
}
Chris Suszyński
quelle
11
Das ist eine ziemlich schwache Debug-Protokollierung. Es werden nur die Anforderungsheader und die "Sicherheitsfilterkette" ausgedruckt. Überhaupt nicht nützlich, um Zugriffsprobleme aufzuspüren.
Chloe
4

Sie können die Debugging-Unterstützung einfach aktivieren, indem Sie eine Option für die Annotation @EnableWebSecurity verwenden:

@EnableWebSecurity(debug = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    …
}

Wenn Sie eine profilspezifische Steuerung benötigen, verwenden Sie die in Ihrer Anwendung {Profil} .properties- Datei

org.springframework.security.config.annotation.web.builders.WebSecurity.debugEnabled=false

Detaillierten Beitrag erhalten: http://www.bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/

Ankit Katiyar
quelle
0

Die Spring Security-Protokollierung für reaktive Webflux-Apps ist ab Version 5.4.0-M2 verfügbar (wie von @bzhu im Kommentar erwähnt. Wie aktiviere ich die Protokollierung für Spring Security? )

Bis dies zu einer GA-Version wird, erfahren Sie hier, wie Sie diese Meilenstein-Version in Gradle erhalten

repositories {
    mavenCentral()
    if (!version.endsWith('RELEASE')) {
        maven { url "https://repo.spring.io/milestone" }
    }
}

// Force earlier milestone release to get securing logging preview
// https://docs.spring.io/spring-security/site/docs/current/reference/html5/#getting-gradle-boot
// https://github.com/spring-projects/spring-security/pull/8504
// https://github.com/spring-projects/spring-security/releases/tag/5.4.0-M2
ext['spring-security.version']='5.4.0-M2'
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }

}
Guillaume Berche
quelle
-7

Standardmäßig leitet Spring Security den Benutzer nach der Anmeldung zu der URL weiter, die er ursprünglich angefordert hatte (in Ihrem Fall /Load.do).

Sie können always-use-default-target auf true setzen, um dieses Verhalten zu deaktivieren:

 <security:http auto-config="true">

    <security:intercept-url pattern="/Admin**" access="hasRole('PROGRAMMER') or hasRole('ADMIN')"/>
    <security:form-login login-page="/Load.do"
        default-target-url="/Admin.do?m=loadAdminMain"
        authentication-failure-url="/Load.do?error=true"
        always-use-default-target = "true"
        username-parameter="j_username"
        password-parameter="j_password"
        login-processing-url="/j_spring_security_check"/>
    <security:csrf/><!-- enable Cross Site Request Forgery protection -->
</security:http>
Sohil
quelle
3
Dies beantwortet die Frage von op nicht.
Madbreaks