Як увімкнути ведення журналу для Spring Security?


94

Я налаштовую 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
перевірте це посилання, якщо це може вам допомогти.
піза

1
@pise ви можете додати це як відповідь (принаймні з відповідним уривком / резюме), щоб я міг позначити це як вирішене?
Мартін Карні,

Дивіться відповідь на це питання: stackoverflow.com/questions/7840088 / ...
nevster

Хе - спробував додати це як відповідь і SO перетворив його на коментар.
невстер

Відповіді:


172

Якщо припустити, що ви використовуєте 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.
Зігген

70

Ви можете легко увімкнути підтримку налагодження, використовуючи опцію для @EnableWebSecurityанотації:

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

Як щодо того EnableWebFluxSecurity, у нього немає опції налагодження
bzhu

1
Ах, цікаво. Однак я не маю досвіду роботи з WebFlux.
Michael Piefel

1
чи є спосіб керувати цим прапором з application.properties
Анкіт Катіяр,

25

Базову налагодження за допомогою Spring DebugFilterможна налаштувати так:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

11
Це досить слабкі журнали налагодження. Він друкує лише заголовки запитів та "Ланцюжок фільтру безпеки". Зовсім не корисний при відстеженні проблем доступу.
Хлоя

4

Ви можете легко увімкнути підтримку налагодження, використовуючи опцію для анотації @EnableWebSecurity:

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

Якщо вам потрібен спеціальний контроль за профілем, у файлі .properties вашого додатка {profile}

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 у вашому випадку) після входу.

Ви можете встановити true-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
Це не відповідає на запитання ОП.
Madbreaks
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.