Bagaimana cara mengaktifkan logging untuk Spring Security?

94

Saya menyiapkan Keamanan Musim Semi untuk menangani pengguna yang masuk. Saya telah masuk sebagai pengguna, dan dibawa ke halaman kesalahan Access Denied setelah berhasil masuk. Saya tidak tahu peran apa yang sebenarnya telah ditetapkan oleh pengguna saya, atau aturan yang menyebabkan akses ditolak, karena saya tidak tahu cara mengaktifkan debugging untuk pustaka Keamanan Musim Semi.

Xml keamanan saya:

<?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>

Saya juga mencoba menambahkan log4j.logger.org.springframework.security=DEBUGke log4j.properties saya

Bagaimana saya bisa mendapatkan keluaran debug untuk Keamanan Musim Semi?

Martin Carney
sumber
2
periksa tautan ini Jika ini dapat membantu Anda.
pise
1
@ Pise dapatkah Anda menambahkannya sebagai jawaban (dengan setidaknya kutipan / ringkasan yang relevan) sehingga saya dapat menandai ini sebagai terselesaikan?
Martin Carney
Lihat jawaban untuk pertanyaan ini: stackoverflow.com/questions/7840088/…
nevster
Heh - mencoba menambahkannya sebagai jawaban dan SO mengubahnya menjadi komentar.
nevster

Jawaban:

171

Dengan asumsi Anda menggunakan Spring Boot, opsi lain adalah meletakkan yang berikut ini di application.properties:

logging.level.org.springframework.security=DEBUG

Ini sama untuk kebanyakan modul Spring lainnya juga.

Jika Anda tidak menggunakan Spring Boot, coba setel properti di konfigurasi logging Anda, misalnya logback.

Ini juga versi application.yml:

logging:
  level:
    org:
      springframework:
        security: DEBUG
delucasvb.dll
sumber
2
Apakah ini mengasumsikan Spring Boot?
John Camerin
1
@JohnCamerin Ya, itu benar. Mengatur level log masuk application.propertiesadalah fitur Spring Boot. Jika Anda tidak menggunakan Spring Boot, Anda dapat menyetel level log org.springframework.securitydengan cara lain (misalnya, di logback.xml Anda).
Dario Seidl
1
Untuk WebFlux tidak berfungsi: github.com/spring-projects/spring-security/issues/5758
bzhu
Tambahkan org.springframework.web.corsuntuk mengaktifkan log prosesor Cors.
Siggen
70

Anda dapat dengan mudah mengaktifkan dukungan debugging menggunakan opsi untuk @EnableWebSecurityanotasi:

@EnableWebSecurity(debug = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    …
}
Michael Piefel
sumber
Bagaimana EnableWebFluxSecurity, itu tidak memiliki opsi debug
bzhu
1
Ah, menarik. Namun, saya tidak memiliki pengalaman dengan WebFlux.
Michael Piefel
1
apakah ada cara untuk mengontrol flag ini dari application.properties
Ankit Katiyar
25

Debugging dasar menggunakan Spring DebugFilterdapat dikonfigurasi seperti ini:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.debug(true);
    }
}
Chris Suszyński
sumber
11
Itu adalah penebangan debug yang cukup lemah. Ini hanya mencetak header permintaan dan "Rantai filter keamanan". Tidak berguna sama sekali saat melacak masalah akses.
Chloe
4

Anda dapat dengan mudah mengaktifkan dukungan debugging menggunakan opsi untuk anotasi @EnableWebSecurity:

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

Jika Anda memerlukan kontrol khusus profil dalam file application- {profile} .properties

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

Dapatkan Pos Terperinci: http://www.bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/

Ankit Katiyar
sumber
0

Pencatatan keamanan musim semi untuk aplikasi reaktif webflux sekarang tersedia mulai dengan versi 5.4.0-M2 (sebagaimana disebutkan oleh @bzhu di komentar Bagaimana cara mengaktifkan pencatatan untuk Keamanan Musim Semi? )

Sampai ini masuk ke rilis GA, berikut adalah cara mendapatkan rilis pencapaian ini dalam gradle

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
sumber
-7

Secara default, Spring Security mengarahkan pengguna ke URL yang awalnya dia minta (/Load.do dalam kasus Anda) setelah login.

Anda dapat menyetel selalu-gunakan-default-target ke true untuk menonaktifkan perilaku ini:

 <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
sumber
3
Ini tidak menjawab pertanyaan op.
Madbreaks