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?


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

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


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 {
    …
}

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);
    }
}

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/


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}"
    }

}

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

3
Ini tidak menjawab pertanyaan op.
Madbreaks
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.