Hoe schakel ik logboekregistratie in voor Spring Security?

Ik ben Spring Security aan het instellen om inloggende gebruikers af te handelen. Ik heb me aangemeld als gebruiker en krijg een foutpagina Toegang geweigerd nadat ik me heb aangemeld. Ik weet niet welke rollen mijn gebruiker daadwerkelijk is toegewezen, of de regel die ervoor zorgt dat toegang wordt geweigerd, omdat ik niet weet hoe ik foutopsporing voor de Spring Security-bibliotheek kan inschakelen.

Mijn beveiligings-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>

Ik heb ook geprobeerd log4j.logger.org.springframework.security=DEBUGtoe te voegen aan mijn log4j.properties

Hoe kan ik debug-output voor Spring Security krijgen?


Antwoord 1, autoriteit 100%

Ervan uitgaande dat u Spring Boot gebruikt, is een andere optie om het volgende in uw application.propertieste plaatsen:

logging.level.org.springframework.security=DEBUG

Dit geldt ook voor de meeste andere Spring-modules.

Als u Spring Boot niet gebruikt, probeer dan de eigenschap in uw logboekconfiguratie in te stellen, b.v. log terug.

Hier is ook de application.yml-versie:

logging:
  level:
    org:
      springframework:
        security: DEBUG

Antwoord 2, autoriteit 39%

U kunt eenvoudig ondersteuning voor foutopsporing inschakelen met een optie voor de annotatie @EnableWebSecurity:

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

Antwoord 3, autoriteit 12%

Basisfoutopsporing met Spring’s DebugFilterkan als volgt worden geconfigureerd:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.debug(true);
    }
}

Antwoord 4, autoriteit 3%

U kunt eenvoudig ondersteuning voor foutopsporing inschakelen met een optie voor de @EnableWebSecurity-annotatie:

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

Als u profielspecifieke controle nodig heeft, vindt u in uw application-{profile}.properties-bestand

org.springframework.security.config.annotation.web.builders.WebSecurity.debugEnabled=false

Gedetailleerde post ontvangen: http://www .bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/


Antwoord 5

We kunnen altijd de geregistreerde filters binnen Spring Security controleren met de onderstaande configuratie

  1. @EnableWebSecurity(debug=true)– We moeten het debuggen van de beveiligingsdetails inschakelen
  2. Schakel het loggen van de details in door de onderstaande eigenschap toe te voegen aan de application.propertieslogging.level.org.springframework.security.web.FilterChainProxy=DEBUG

Hieronder worden enkele van de interne filters van Spring Security genoemd die worden uitgevoerd in de authenticatiestroom:

Security filter chain: [
  CharacterEncodingFilter
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  CsrfFilter
  LogoutFilter
  X509AuthenticationFilter
  UsernamePasswordAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  RememberMeAuthenticationFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]

Antwoord 6

Voorjaarsbeveiligingsregistratie voor webflux-reactieve apps is nu beschikbaar vanaf versie 5.4.0-M2 (zoals vermeld door @bzhuin reactie Hoe schakel ik logboekregistratie in voor Spring Security?)

Totdat dit in een GA-release komt, volgt hier hoe u deze mijlpaalrelease in gradle kunt krijgen

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}"
    }
}

Other episodes