|
1 | 1 | package no.nav.security.token.support.filter
|
2 | 2 |
|
| 3 | +import jakarta.servlet.DispatcherType |
| 4 | +import jakarta.servlet.DispatcherType.* |
3 | 5 | import jakarta.servlet.Filter
|
4 | 6 | import jakarta.servlet.FilterChain
|
5 | 7 | import jakarta.servlet.FilterConfig
|
| 8 | +import jakarta.servlet.RequestDispatcher.ERROR_EXCEPTION |
6 | 9 | import jakarta.servlet.ServletRequest
|
7 | 10 | import jakarta.servlet.ServletResponse
|
8 | 11 | import jakarta.servlet.http.HttpServletRequest
|
9 | 12 | import jakarta.servlet.http.HttpServletResponse
|
10 | 13 | import no.nav.security.token.support.core.context.TokenValidationContextHolder
|
11 | 14 | import no.nav.security.token.support.core.http.HttpRequest
|
12 | 15 | import no.nav.security.token.support.core.validation.JwtTokenValidationHandler
|
| 16 | +import org.slf4j.LoggerFactory |
13 | 17 |
|
14 | 18 | open class JwtTokenValidationFilter(private val jwtTokenValidationHandler : JwtTokenValidationHandler, private val contextHolder : TokenValidationContextHolder) : Filter {
|
15 |
| - |
| 19 | + private val log = LoggerFactory.getLogger(JwtTokenValidationFilter::class.java) |
16 | 20 | override fun destroy() {}
|
17 | 21 |
|
18 | 22 | override fun doFilter(request : ServletRequest, response : ServletResponse, chain : FilterChain) {
|
19 | 23 | if (request is HttpServletRequest) {
|
20 |
| - doTokenValidation(request, response as HttpServletResponse, chain) |
| 24 | + if (request.dispatcherType == ASYNC && (request.getAttribute(ERROR_EXCEPTION) as? String)?.contains("broken pipe", ignoreCase = true) == true) { |
| 25 | + log.trace("Skipping token validation for async request, client is gone") |
| 26 | + chain.doFilter(request, response) |
| 27 | + } |
| 28 | + else { |
| 29 | + doTokenValidation(request, response as HttpServletResponse, chain) |
| 30 | + } |
21 | 31 | }
|
22 | 32 | else {
|
23 | 33 | chain.doFilter(request, response)
|
|
0 commit comments