Как включить ведение журнала для Spring Безопасность?

Я настраиваю Spring Security для обработки входа пользователей. Я вошел в систему как пользователь и после успешного входа на страницу ошибки доступа отказано. Я не знаю, какие роли фактически были назначены моему пользователю или какое правило запрещает доступ, потому что я не могу понять, как включить отладку для библиотеки Spring Security.

Xml моей безопасности:

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >
    <!-- security -->

    <security:debug/><!-- does not 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?

Ответы

Ответ 1

Предполагая, что вы используете Spring Boot, другой вариант - добавить в application.properties следующее:

logging.level.org.springframework.security=DEBUG

Это то же самое для большинства других модулей Spring.

Если вы не используете Spring Boot, попробуйте установить свойство в вашей конфигурации регистрации, например, Logback.

Ответ 2

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

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

Ответ 3

Базовая отладка с использованием Spring DebugFilter может быть сконфигурирована следующим образом:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

Ответ 4

По умолчанию 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>