1. 概要

使用する場合春のセキュリティ 、デフォルトよりも高いレベルにログを記録する必要がある場合があります。 たとえば、ユーザーの役割やエンドポイントがどのように保護されているかを確認する必要がある場合があります。 または、たとえば、ユーザーがエンドポイントにアクセスできない理由を確認するために、認証または承認に関する詳細情報も必要になる場合があります。

この短いチュートリアルでは、Springセキュリティログレベルを変更する方法を説明します。

2. Springセキュリティロギングを構成する

他のSpringまたはJavaアプリケーションと同様に、ロガーライブラリを使用して、SpringSecurityモジュールのログレベルを定義できます

通常、構成ファイルには次のように書き込むことができます。

<logger name="org.springframework.security" level="DEBUG" />

ただし、Spring Bootアプリケーションを実行している場合は、application.propertiesファイルでこれを構成できます。

logging.level.org.springframework.security=DEBUG

同様に、yaml構文を使用できます。

logging:
  level:
    org:
      springframework:
        security: DEBUG

このようにして、認証またはフィルターチェーンに関するログを確認できます。 さらに、traceレベルを使用してより詳細なデバッグを行うこともできます。

さらに、 Spring Securityは、リクエストと適用されたフィルターに関する特定の情報をログに記録する可能性を提供します

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${spring.websecurity.debug:false}")
    boolean webSecurityDebug;

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

3. ログサンプル

最後に、アプリケーションをテストするために、簡単なコントローラーを定義しましょう。

@Controller
public class LoggingController {

    @GetMapping("/logging")
    public ResponseEntity<String> logging() {
        return new ResponseEntity<>("logging/baeldung", HttpStatus.OK);
    }

}

ヒットした場合 / logging エンドポイント、ログを確認できます。

2022-02-10 21:30:32.104 DEBUG 5489 --- [nio-8080-exec-1] o.s.s.w.a.i.FilterSecurityInterceptor    : Authorized filter invocation [GET /logging] with attributes [permitAll]
2022-02-10 21:30:32.105 DEBUG 5489 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy        : Secured GET /logging
2022-02-10 21:30:32.141 DEBUG 5489 --- [nio-8080-exec-1] w.c.HttpSessionSecurityContextRepository : Did not store anonymous SecurityContext
2022-02-10 21:30:32.146 DEBUG 5489 --- [nio-8080-exec-1] s.s.w.c.SecurityContextPersistenceFilter : Cleared SecurityContextHolder to complete request
Request received for GET '/logging':

org.apache.catalina.connector.RequestFacade@78fe74c6

servletPath:/logging
pathInfo:null
headers: 
host: localhost:8080
connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site: none
sec-fetch-mode: navigate
sec-fetch-user: ?1
sec-fetch-dest: document
accept-encoding: gzip, deflate, br
accept-language: en,it;q=0.9,en-US;q=0.8
cookie: PGADMIN_LANGUAGE=en; NX-ANTI-CSRF-TOKEN=0.7130543323088452; _ga=GA1.1.1440105797.1623675414; NXSESSIONID=bec8cae2-30e2-4ad4-9333-cba1af5dc95c; JSESSIONID=1C7CD365F521609AD887B3D6C2BE26CC


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

4. 結論

この記事では、SpringSecurityのさまざまなロギングレベルを有効にするためのいくつかのオプションについて説明しました。

Springセキュリティモジュールにdebugレベルを使用する方法を見てきました。 また、単一のリクエストに関する特定の情報をログに記録する方法も確認しました。

いつものように、これらの例のコードはGitHubから入手できます。