Как включить ведение журнала для 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>