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=DEBUG내 log4j.properties에 추가하려고 시도했습니다.

Spring Security에 대한 디버그 출력을 어떻게 얻을 수 있습니까?


2
이것이 당신을 도울 수 있다면 이 링크를 확인하십시오 .
2015 년

1
@pise 답변으로 추가 할 수 있습니까 (적어도 관련 발췌 / 요약 포함). 해결 된 것으로 표시 할 수 있습니까?
Martin Carney

이 질문에 대한 답을보십시오 : stackoverflow.com/questions/7840088/…
nevster

Heh-답변으로 추가하려고했고 댓글로 변환했습니다.
nevster

답변:


171

Spring Boot를 사용한다고 가정하면 또 다른 옵션은 다음을 입력하는 것입니다 application.properties.

logging.level.org.springframework.security=DEBUG

이것은 대부분의 다른 Spring 모듈에서도 동일합니다.

Spring Boot를 사용하지 않는 경우 로깅 구성 (예 : logback)에서 속성을 설정해보십시오.

다음은 application.yml 버전도 있습니다.

logging:
  level:
    org:
      springframework:
        security: DEBUG

2
이것은 Spring Boot를 가정합니까?
John Camerin 19

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.corsCors 프로세서 로그를 활성화하려면 추가 합니다.
Siggen

70

@EnableWebSecurity주석 옵션을 사용하여 디버깅 지원을 쉽게 활성화 할 수 있습니다 .

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

방법에 대해 EnableWebFluxSecurity, 그것은 디버그 옵션이 없습니다
bzhu

1
아, 흥미 롭군요. 그러나 WebFlux에 대한 경험이 없습니다.
Michael Piefel 19

1
application.properties에서이 플래그를 제어하는 ​​방법이
있습니까?

25

Spring을 사용한 기본 디버깅 DebugFilter은 다음과 같이 구성 할 수 있습니다.

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

11
이것은 매우 약한 디버그 로깅입니다. 요청 헤더와 "보안 필터 체인"만 인쇄합니다. 액세스 문제를 추적 할 때 전혀 유용하지 않습니다.
Chloe

4

@EnableWebSecurity 주석 옵션을 사용하여 디버깅 지원을 쉽게 활성화 할 수 있습니다.

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

프로필 별 제어가 필요한 경우 application- {profile} .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 반응 형 앱에 대한 Spring 보안 로깅은 이제 버전 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.