ฉันจะเปิดใช้งานการบันทึกสำหรับ Spring Security ได้อย่างไร


94

ฉันกำลังตั้งค่า Spring Security เพื่อจัดการกับผู้ใช้ที่เข้าสู่ระบบฉันได้เข้าสู่ระบบในฐานะผู้ใช้และถูกนำไปที่หน้าข้อผิดพลาด Access Denied เมื่อเข้าสู่ระบบสำเร็จ ฉันไม่รู้ว่าผู้ใช้ของฉันได้รับมอบหมายบทบาทอะไรหรือกฎที่ทำให้การเข้าถึงถูกปฏิเสธเพราะฉันไม่สามารถหาวิธีเปิดใช้งานการดีบักสำหรับไลบรารี Spring Security ได้

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>

ฉันได้ลองเพิ่มlog4j.logger.org.springframework.security=DEBUGlog4j.properties ของฉันแล้วด้วย

ฉันจะรับเอาต์พุตการดีบักสำหรับ Spring Security ได้อย่างไร


2
ตรวจสอบลิงค์นี้หากสามารถช่วยคุณได้
pise

1
@pise คุณสามารถเพิ่มเป็นคำตอบได้ไหม (อย่างน้อยก็มีข้อความที่ตัดตอนมา / สรุปที่เกี่ยวข้อง) เพื่อที่ฉันจะได้ทำเครื่องหมายว่าแก้ไขแล้ว
Martin Carney

ดูคำตอบสำหรับคำถามนี้: stackoverflow.com/questions/7840088/…
nevster

เฮ้ - พยายามเพิ่มเป็นคำตอบแล้วจึงแปลงเป็นความคิดเห็น
nevster

คำตอบ:


172

สมมติว่าคุณใช้ Spring Boot อีกทางเลือกหนึ่งคือใส่สิ่งต่อไปนี้ในapplication.properties:

logging.level.org.springframework.security=DEBUG

สิ่งนี้เหมือนกันสำหรับโมดูล Spring อื่น ๆ ส่วนใหญ่เช่นกัน

หากคุณไม่ได้ใช้ Spring Boot ให้ลองตั้งค่าคุณสมบัติในการกำหนดค่าการบันทึกของคุณเช่นการบันทึกย้อนกลับ

นี่คือเวอร์ชัน application.yml เช่นกัน:

logging:
  level:
    org:
      springframework:
        security: DEBUG

2
สิ่งนี้ถือว่า Spring Boot หรือไม่?
John Camerin

1
@JohnCamerin ใช่ค่ะ การตั้งค่าระดับการเข้าสู่ระบบapplication.propertiesเป็นคุณลักษณะ Spring Boot หากคุณไม่ได้ใช้ Spring Boot คุณสามารถตั้งค่าระดับการบันทึกorg.springframework.securityด้วยวิธีอื่นได้ (เช่นใน logback.xml ของคุณ)
Dario Seidl

1
สำหรับ WebFlux มันไม่ทำงาน: github.com/spring-projects/spring-security/issues/5758
bzhu

เพิ่มorg.springframework.web.corsเพื่อเปิดใช้งานบันทึกโปรเซสเซอร์ Cors
Siggen

70

คุณสามารถเปิดใช้งานการสนับสนุนการดีบักได้อย่างง่ายดายโดยใช้ตัวเลือกสำหรับ@EnableWebSecurityคำอธิบายประกอบ:

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

วิธีการเกี่ยวกับEnableWebFluxSecurityมันไม่ได้มีตัวเลือกในการแก้ปัญหา
bzhu

1
อ่าน่าสนใจ อย่างไรก็ตามฉันไม่มีประสบการณ์กับ WebFlux
Michael Piefel

1
มีวิธีควบคุมแฟ
ล็ก

25

การดีบักพื้นฐานโดยใช้ Spring DebugFilterสามารถกำหนดค่าได้ดังนี้:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

11
นั่นคือการบันทึกการดีบักที่ค่อนข้างอ่อนแอ โดยจะพิมพ์เฉพาะส่วนหัวของคำขอและ "Security filter chain" เท่านั้น ไม่มีประโยชน์เลยเมื่อติดตามปัญหาการเข้าถึง
Chloe

4

คุณสามารถเปิดใช้งานการสนับสนุนการดีบักได้อย่างง่ายดายโดยใช้ตัวเลือกสำหรับคำอธิบายประกอบ @EnableWebSecurity:

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

การควบคุมหากคุณต้องการรายละเอียดเฉพาะของคุณในโปรแกรมประยุกต์ {ประวัติ} .propertiesไฟล์

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

รับโพสต์โดยละเอียด: http://www.bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/


0

ขณะนี้การบันทึกการรักษาความปลอดภัยแบบสปริงสำหรับแอปพลิเคชันรีแอคทีฟ webflux พร้อมใช้งานแล้วโดยเริ่มจากเวอร์ชัน 5.4.0-M2 (ตามที่@bzhuกล่าวถึงในความคิดเห็นฉันจะเปิดใช้งานการบันทึกสำหรับ Spring Security ได้อย่างไร )

จนกว่าจะเข้าสู่รุ่น GA ต่อไปนี้คือวิธีรับรุ่นสำคัญนี้ใน 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

โดยค่าเริ่มต้น Spring Security จะเปลี่ยนเส้นทางผู้ใช้ไปยัง URL ที่เขาร้องขอในตอนแรก (/Load.do ในกรณีของคุณ) หลังจากเข้าสู่ระบบ

คุณสามารถตั้งค่า always-use-default-target เป็น true เพื่อปิดใช้งานพฤติกรรมนี้:

 <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
สิ่งนี้ไม่ตอบคำถามของ op
Madbreaks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.