1. Обзор
При использовании Spring Security нам может потребоваться вход на более высокий уровень, чем уровень по умолчанию. Нам может потребоваться проверить, например, роли пользователей или то, как защищены конечные точки. Или, может быть, нам также нужна дополнительная информация об аутентификации или авторизации, например, чтобы понять, почему пользователю не удается получить доступ к конечной точке.
В этом кратком руководстве мы увидим, как изменить уровень ведения журнала Spring Security.
2. Настройте ведение журнала безопасности Spring
Как и любое приложение 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 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/foreach", 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.
Мы увидели, как использовать уровень отладки
для модулей Spring Security. Кроме того, мы увидели, как регистрировать конкретную информацию об отдельных запросах.
Как всегда, код этих примеров доступен на GitHub .