मैं स्प्रिंग सुरक्षा के लिए लॉगिंग कैसे सक्षम करूं?


96

मैं लॉग इन उपयोगकर्ताओं को संभालने के लिए स्प्रिंग सिक्योरिटी स्थापित कर रहा हूं। मैंने एक उपयोगकर्ता के रूप में लॉग इन किया है, और सफल लॉगिन पर एक एक्सेस अस्वीकृत त्रुटि पृष्ठ पर ले जाया गया है। मुझे नहीं पता कि मेरे उपयोगकर्ता को वास्तव में कौन सी भूमिकाएं सौंपी गई हैं, या नियम जो पहुंच से वंचित करता है, क्योंकि मैं यह पता नहीं लगा सकता हूं कि स्प्रिंग सुरक्षा पुस्तकालय के लिए डिबगिंग को कैसे सक्षम किया जाए।

मेरी सुरक्षा 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=DEBUGअपने log4j.properties को जोड़ने की कोशिश की है

मैं स्प्रिंग सिक्योरिटी के लिए डीबग आउटपुट कैसे प्राप्त कर सकता हूं?


2
इस लिंक की जाँच करें यदि यह आपकी मदद कर सकता है।
pise

1
@ आप इसे उत्तर के रूप में जोड़ सकते हैं (कम से कम एक प्रासंगिक अंश / सारांश के साथ) तो मैं इसे हल के रूप में चिह्नित कर सकता हूं?
मार्टिन कार्नी

इस प्रश्न का उत्तर देखें: stackoverflow.com/questions/7840088/…
nevster

हेह - ने इसे एक उत्तर के रूप में जोड़ने की कोशिश की और एसओ ने इसे एक टिप्पणी में बदल दिया।
नेवस्टर

जवाबों:


178

यह मानते हुए कि आप स्प्रिंग बूट का उपयोग कर रहे हैं, एक और विकल्प यह है कि आप इसमें निम्नलिखित डाल सकते हैं application.properties:

logging.level.org.springframework.security=DEBUG

यह अधिकांश अन्य स्प्रिंग मॉड्यूल के लिए भी समान है।

यदि आप स्प्रिंग बूट का उपयोग नहीं कर रहे हैं, तो अपने लॉगिंग कॉन्फ़िगरेशन में संपत्ति सेट करने का प्रयास करें, जैसे लॉगबैक।

यहाँ के रूप में अच्छी तरह से application.yml संस्करण है:

logging:
  level:
    org:
      springframework:
        security: DEBUG

2
क्या यह स्प्रिंग बूट मान लेता है?
जॉन कैमरिन

1
@ जॉनकोमेरिन हाँ, यह करता है। लॉग स्तर सेट करना application.propertiesएक स्प्रिंग बूट सुविधा है। यदि आप स्प्रिंग बूट का उपयोग नहीं करते हैं, तो आप लॉग स्तर org.springframework.securityको अन्य माध्यमों से सेट कर सकते हैं (उदाहरण के लिए आपके logback.xml में)।
डेरियो सेडल

1
WebFlux के लिए यह काम नहीं कर रहा है: github.com/spring-projects/spring-security/issues/5758
bzhu

org.springframework.web.corsCors प्रोसेसर लॉग को सक्षम करने के लिए जोड़ें ।
सिजेन

73

आप @EnableWebSecurityएनोटेशन के लिए एक विकल्प का उपयोग करके डिबगिंग समर्थन को आसानी से सक्षम कर सकते हैं :

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

कैसे के बारे में EnableWebFluxSecurity, यह डिबग विकल्प नहीं है
bzhu

1
आह, दिलचस्प है। हालाँकि, मुझे WebFlux के साथ कोई अनुभव नहीं है।
माइकल पिफेल

1
क्या इस ध्वज को application.properties से नियंत्रित करने का एक तरीका है
अंकित कटियार

25

मूल डिबगिंग का उपयोग करके स्प्रिंग को DebugFilterइस तरह कॉन्फ़िगर किया जा सकता है:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

12
यह कुछ बहुत कमजोर डिबग लॉगिंग है। यह केवल अनुरोध शीर्षलेख और "सुरक्षा फ़िल्टर श्रृंखला" प्रिंट करता है। पहुँच समस्याओं पर नज़र रखने के दौरान बिल्कुल भी उपयोगी नहीं है।
क्लो

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

वेबफ्लक्स प्रतिक्रियाशील ऐप्स के लिए स्प्रिंग सुरक्षा लॉगिंग अब संस्करण 5.4.0-M2 के साथ शुरू हो रही है (जैसा कि टिप्पणी में @bzhu द्वारा उल्लेख किया गया है) मैं स्प्रिंग सुरक्षा के लिए लॉगिंग कैसे सक्षम करूं? )

जब तक यह जीए रिलीज में शामिल नहीं हो जाता, तब तक यहां यह है कि इस मील के पत्थर को ग्रेडेल में कैसे छोड़ा जाए

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

डिफ़ॉल्ट रूप से स्प्रिंग सुरक्षा उपयोगकर्ता को उस URL पर पुनर्निर्देशित करता है जिसे उसने लॉगिन के बाद मूल रूप से अनुरोध किया था (/ अपने मामले में)।

इस व्यवहार को अक्षम करने के लिए आप हमेशा उपयोग-डिफ़ॉल्ट-लक्ष्य को सही पर सेट कर सकते हैं:

 <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 के प्रश्न का उत्तर नहीं देता है।
मैडब्रिक्स सिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.