1. 概述
使用 Spring Security 時,我們可能需要將日誌級別記錄到比默認級別更高的層級。例如,我們需要檢查用户的角色或端點的安全性。或者,我們可能還需要關於身份驗證或授權的更多信息,例如查看用户無法訪問端點的原因。
在本簡短教程中,我們將學習如何修改 Spring Security 的日誌級別。
2. 配置 Spring Security 日誌
類似於任何 Spring 或 Java 應用程序,我們可以使用日誌庫併為 Spring Security 模塊定義日誌級別
通常,我們可以將以下內容寫入我們的配置文件中:
<logger name="org.springframework.security" level="DEBUG" />
但是,如果我們在運行 Spring Boot 應用程序時, 我們可以將其配置在我們的 application.properties 文件中:
logging.level.org.springframework.security=DEBUG
同樣,我們可以使用 yaml 語法:
logging:
level:
org:
springframework:
security: DEBUG
這樣,我們可以查看有關身份驗證或 過濾器鏈代理 的日誌。
此外,Spring Security 提供了記錄有關請求和應用過濾器的特定信息的功能:
@EnableWebSecurity
public class SecurityConfig {
@Value("${spring.websecurity.debug:false}")
boolean webSecurityDebug;
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> 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. 結論
在本文中,我們探討了多種方法以啓用 Spring Security 中不同的日誌級別。
我們看到了如何使用 debug 級別進行 Spring Security 模塊的日誌記錄。 此外,我們還看到了如何記錄單個請求的特定信息。