debugging - ¿Cómo habilito el registro para Spring Security?
spring-security (4)
La depuración básica con Spring''s
DebugFilter
se puede configurar así:
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.debug(true);
}
}
Estoy configurando Spring Security para gestionar el inicio de sesión de los usuarios. He iniciado sesión como usuario y me llevan a una página de error de Acceso denegado al iniciar sesión correctamente. No sé qué roles le han asignado realmente a mi usuario, o la regla que hace que se deniegue el acceso, porque no puedo encontrar la manera de habilitar la depuración de la biblioteca Spring Security.
Mi xml de seguridad:
<?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>
También he intentado agregar
log4j.logger.org.springframework.security=DEBUG
a mi log4j.properties
¿Cómo puedo obtener resultados de depuración para Spring Security?
Por defecto, Spring Security redirige al usuario a la URL que solicitó originalmente (/Load.do en su caso) después de iniciar sesión.
Puede establecer siempre-use-default-target en true para deshabilitar este comportamiento:
<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>
Puede habilitar fácilmente el soporte de depuración utilizando una opción para la anotación
@EnableWebSecurity
:
@EnableWebSecurity(debug = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
…
}
Suponiendo que está utilizando Spring Boot, otra opción es poner lo siguiente en su
application.properties
.
logging.level.org.springframework.security=DEBUG
Esto es lo mismo para la mayoría de los otros módulos Spring también.
Si no está utilizando Spring Boot, intente configurar la propiedad en su configuración de registro, por ejemplo, logback.