如何启用Spring Security的日志记录?


96

我正在设置Spring Security来处理登录用户。我已经以用户身份登录,并且在成功登录后进入“拒绝访问”错误页面。我不知道实际上为用户分配了哪些角色,或者不知道导致访问被拒绝的规则,因为我不知道如何为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
检查此链接,如果这可以帮助您。
pise 2015年

1
@pise您可以将其添加为答案(至少具有相关的摘录/摘要),以便将其标记为已解决吗?
马丁·卡尼


嘿-尝试将其添加为答案,因此将其转换为评论。
nevster '16

Answers:


178

假设您使用的是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?
约翰·卡梅林,

1
@JohnCamerin是的,确实如此。设置日志级别application.properties是Spring Boot的功能。如果您不使用Spring Boot,则可以org.springframework.security通过其他方式(例如,在logback.xml中)设置日志级别。
达里奥·塞德尔

1
对于WebFlux,它不起作用:github.com/spring-projects/spring-security/issues/5758
bzhu

添加org.springframework.web.cors以启用Cors处理器日志。
锡根(Siggen)

73

您可以使用@EnableWebSecurity注释选项轻松启用调试支持:

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

怎么样EnableWebFluxSecurity,它没有调试选项
bzhu 19'Oct

1
啊,有趣。但是,我没有使用WebFlux的经验。
迈克尔·皮弗

1
有没有一种方法可以从application.properties中控制此标志
Ankit Katiyar

25

使用Spring的基本调试DebugFilter可以这样配置:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

12
那是一些相当弱的调试日志记录。它仅打印出请求标头和“安全过滤器链”。跟踪访问问题时根本没有用。
克洛伊(Chloe)'18年

4

您可以使用@EnableWebSecurity批注的选项来轻松启用调试支持:

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

如果您需要特定于配置文件的控制,请在应用程序-{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

从5.4.0-M2版本开始,现已提供针对webflux反​​应式应用程序的Spring安全日志记录(如@bzhu在评论中提到的如何启用Spring Security日志记录?

在将其发布到Google Analytics(分析)发布之前,这是如何在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's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.