Spring Security için günlük kaydını nasıl etkinleştiririm?


94

Kullanıcıların oturum açmasını idare etmek için Spring Security'yi ayarlıyorum. Bir kullanıcı olarak oturum açtım ve başarılı bir şekilde oturum açtıktan sonra Erişim Engellendi hata sayfasına yönlendirildim. Kullanıcıma gerçekte hangi rollerin atandığını veya erişimin reddedilmesine neden olan kuralı bilmiyorum, çünkü Spring Security kitaplığı için hata ayıklamayı nasıl etkinleştireceğimi bulamıyorum.

Güvenlik xml'im:

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

Ayrıca log4j.logger.org.springframework.security=DEBUGlog4j. özelliklerime eklemeyi denedim

Spring Security için hata ayıklama çıktısını nasıl alabilirim?


2
Bu size yardımcı olabilirse bu bağlantıyı kontrol edin .
pise

1
@pise, bunu bir yanıt olarak ekleyebilir misiniz (en azından ilgili bir alıntı / özetle), böylece bunu çözüldü olarak işaretleyebilir miyim?
Martin Carney

Bu sorunun cevabına bakın: stackoverflow.com/questions/7840088/…
daha

Heh - bunu bir cevap olarak eklemeye çalıştı ve SO onu bir yoruma dönüştürdü.
nevster

Yanıtlar:


172

Spring Boot kullandığınızı varsayarsak, başka bir seçenek de aşağıdakileri sizin içine koymaktır application.properties:

logging.level.org.springframework.security=DEBUG

Bu, diğer Spring modülleri için de aynıdır.

Spring Boot kullanmıyorsanız, özelliği günlük yapılandırmanızda ayarlamayı deneyin, ör. Logback.

İşte application.yml sürümü de:

logging:
  level:
    org:
      springframework:
        security: DEBUG

2
Bu Spring Boot'u varsayıyor mu?
John Camerin

1
@JohnCamerin Evet, öyle. Günlük düzeylerini ayarlamak application.propertiesbir Spring Boot özelliğidir. Spring Boot kullanmıyorsanız, günlük düzeyini org.springframework.securitybaşka yollarla (örneğin logback.xml dosyanızda) ayarlayabilirsiniz.
Dario Seidl


org.springframework.web.corsCors işlemci günlüklerini etkinleştirmek için ekleyin .
Siggen

70

@EnableWebSecurityEk açıklama için bir seçenek kullanarak hata ayıklama desteğini kolayca etkinleştirebilirsiniz :

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

Peki ya EnableWebFluxSecurity, hata ayıklama seçeneğine sahip değil
bzhu

1
Ah, ilginç. Ancak WebFlux ile hiçbir deneyimim yok.
Michael Piefel

1
application.properties'den bu bayrağı kontrol etmenin bir yolu var mı
Ankit Katiyar

25

Spring kullanarak temel hata ayıklama DebugFilterşu şekilde yapılandırılabilir:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.debug(true);
    }
}

11
Bu oldukça zayıf bir hata ayıklama kaydı. Yalnızca istek başlıklarını ve "Güvenlik filtre zinciri" ni yazdırır. Erişim sorunlarını izlerken hiç yararlı değil.
Chloe

4

@EnableWebSecurity ek açıklaması için bir seçeneği kullanarak hata ayıklama desteğini kolayca etkinleştirebilirsiniz:

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

Profile özgü denetime ihtiyacınız varsa, uygulamanızdaki - {profile} .properties dosyasında

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

Ayrıntılı Gönderi Alın: http://www.bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/


0

Webflux reaktif uygulamaları için bahar güvenlik günlüğü artık 5.4.0-M2 sürümünden itibaren mevcuttur ( yorumda @bzhu tarafından belirtildiği gibi Spring Security için günlük kaydını nasıl etkinleştirebilirim? )

Bu bir GA sürümüne girene kadar, bu dönüm noktası sürümünü gradle'da nasıl edineceğiniz

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

Varsayılan olarak Spring Security, kullanıcıyı, oturum açtıktan sonra başlangıçta istediği URL'ye (sizin durumunuzda /Load.do) yönlendirir.

Bu davranışı devre dışı bırakmak için always-use-default-target değerini true olarak ayarlayabilirsiniz:

 <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
Bu op'un sorusuna cevap vermiyor.
Madbreaks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.