init: 클린 기반 auth 서버 설계
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>JwtTypValidator</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_class">JwtTypValidator</span></div><h1>JwtTypValidator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">29 of 38</td><td class="ctr2">23%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">2</td><td class="ctr2">3</td><td class="ctr1">5</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="JwtTypValidator.java.html#L23" class="el_method">validate(Jwt)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="29" alt="29"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="JwtTypValidator.java.html#L17" class="el_method">JwtTypValidator(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="37" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>JwtTypValidator.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">JwtTypValidator.java</span></div><h1>JwtTypValidator.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import org.springframework.security.oauth2.core.OAuth2Error;
|
||||
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
|
||||
import org.springframework.security.oauth2.core.OAuth2TokenValidatorResult;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class JwtTypValidator implements OAuth2TokenValidator<Jwt> {
|
||||
|
||||
private static final String TYP_CLAIM = "typ";
|
||||
private static final String ERROR_CODE = "invalid_token";
|
||||
|
||||
private final String expectedTyp;
|
||||
|
||||
<span class="fc" id="L17"> public JwtTypValidator(String expectedTyp) {</span>
|
||||
<span class="fc" id="L18"> this.expectedTyp = Objects.requireNonNull(expectedTyp, "expectedTyp must not be null");</span>
|
||||
<span class="fc" id="L19"> }</span>
|
||||
|
||||
@Override
|
||||
public OAuth2TokenValidatorResult validate(Jwt jwt) {
|
||||
<span class="nc" id="L23"> String actual = jwt.getClaimAsString(TYP_CLAIM);</span>
|
||||
<span class="nc bnc" id="L24" title="All 2 branches missed."> if (expectedTyp.equals(actual)) {</span>
|
||||
<span class="nc" id="L25"> return OAuth2TokenValidatorResult.success();</span>
|
||||
}
|
||||
<span class="nc" id="L27"> OAuth2Error error = new OAuth2Error(</span>
|
||||
ERROR_CODE,
|
||||
"Expected JWT typ=" + expectedTyp + " but got " + actual,
|
||||
null
|
||||
);
|
||||
<span class="nc" id="L32"> return OAuth2TokenValidatorResult.failure(error);</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakAuthenticatedUserFactory</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_class">KeycloakAuthenticatedUserFactory</span></div><h1>KeycloakAuthenticatedUserFactory</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 39</td><td class="ctr2">89%</td><td class="bar">2 of 4</td><td class="ctr2">50%</td><td class="ctr1">2</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="KeycloakAuthenticatedUserFactory.java.html#L27" class="el_method">displayName(Jwt)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="88" height="10" title="11" alt="11"/></td><td class="ctr2" id="c3">73%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="KeycloakAuthenticatedUserFactory.java.html#L18" class="el_method">create(Jwt, Collection)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="104" height="10" title="13" alt="13"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="KeycloakAuthenticatedUserFactory.java.html#L35" class="el_method">authorityNames(Collection)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="KeycloakAuthenticatedUserFactory.java.html#L11" class="el_method">KeycloakAuthenticatedUserFactory()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="24" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakAuthenticatedUserFactory.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">KeycloakAuthenticatedUserFactory.java</span></div><h1>KeycloakAuthenticatedUserFactory.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import com.project.auth.presentation.auth.current.AuthenticatedUser;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
<span class="fc" id="L11">public class KeycloakAuthenticatedUserFactory {</span>
|
||||
|
||||
private static final String CLAIM_EMAIL = "email";
|
||||
private static final String CLAIM_NAME = "name";
|
||||
private static final String CLAIM_PREFERRED_USERNAME = "preferred_username";
|
||||
|
||||
public AuthenticatedUser create(Jwt jwt, Collection<? extends GrantedAuthority> authorities) {
|
||||
<span class="fc" id="L18"> return new AuthenticatedUser(</span>
|
||||
<span class="fc" id="L19"> jwt.getSubject(),</span>
|
||||
<span class="fc" id="L20"> jwt.getClaimAsString(CLAIM_EMAIL),</span>
|
||||
<span class="fc" id="L21"> displayName(jwt),</span>
|
||||
<span class="fc" id="L22"> authorityNames(authorities)</span>
|
||||
);
|
||||
}
|
||||
|
||||
private static String displayName(Jwt jwt) {
|
||||
<span class="fc" id="L27"> String name = jwt.getClaimAsString(CLAIM_NAME);</span>
|
||||
<span class="pc bpc" id="L28" title="2 of 4 branches missed."> if (name != null && !name.isBlank()) {</span>
|
||||
<span class="fc" id="L29"> return name;</span>
|
||||
}
|
||||
<span class="nc" id="L31"> return jwt.getClaimAsString(CLAIM_PREFERRED_USERNAME);</span>
|
||||
}
|
||||
|
||||
private static Set<String> authorityNames(Collection<? extends GrantedAuthority> authorities) {
|
||||
<span class="fc" id="L35"> return authorities.stream()</span>
|
||||
<span class="fc" id="L36"> .map(GrantedAuthority::getAuthority)</span>
|
||||
<span class="fc" id="L37"> .collect(Collectors.toUnmodifiableSet());</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakGrantedAuthoritiesConverter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">KeycloakGrantedAuthoritiesConverter.java</span></div><h1>KeycloakGrantedAuthoritiesConverter.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
<span class="fc" id="L15">public class KeycloakGrantedAuthoritiesConverter implements Converter<Jwt, Collection<GrantedAuthority>> {</span>
|
||||
|
||||
private static final String CLAIM_REALM_ACCESS = "realm_access";
|
||||
private static final String CLAIM_ROLES = "roles";
|
||||
private static final String ROLE_PREFIX = "ROLE_";
|
||||
|
||||
<span class="fc" id="L21"> private final JwtGrantedAuthoritiesConverter scopeConverter = new JwtGrantedAuthoritiesConverter();</span>
|
||||
|
||||
@Override
|
||||
public Collection<GrantedAuthority> convert(Jwt jwt) {
|
||||
<span class="fc" id="L25"> Set<GrantedAuthority> authorities = new LinkedHashSet<>(scopeConverter.convert(jwt));</span>
|
||||
<span class="fc bfc" id="L26" title="All 2 branches covered."> for (String role : realmRoles(jwt)) {</span>
|
||||
<span class="fc" id="L27"> authorities.add(new SimpleGrantedAuthority(ROLE_PREFIX + role));</span>
|
||||
<span class="fc" id="L28"> }</span>
|
||||
<span class="fc" id="L29"> return Set.copyOf(authorities);</span>
|
||||
}
|
||||
|
||||
private static List<String> realmRoles(Jwt jwt) {
|
||||
<span class="fc" id="L33"> Map<String, Object> realmAccess = jwt.getClaim(CLAIM_REALM_ACCESS);</span>
|
||||
<span class="pc bpc" id="L34" title="1 of 2 branches missed."> if (realmAccess == null) {</span>
|
||||
<span class="nc" id="L35"> return List.of();</span>
|
||||
}
|
||||
|
||||
<span class="fc" id="L38"> Object roles = realmAccess.get(CLAIM_ROLES);</span>
|
||||
<span class="pc bpc" id="L39" title="1 of 2 branches missed."> if (!(roles instanceof Collection<?> roleValues)) {</span>
|
||||
<span class="nc" id="L40"> return List.of();</span>
|
||||
}
|
||||
|
||||
<span class="fc" id="L43"> return roleValues.stream()</span>
|
||||
<span class="fc" id="L44"> .filter(String.class::isInstance)</span>
|
||||
<span class="fc" id="L45"> .map(String.class::cast)</span>
|
||||
<span class="pc bpc" id="L46" title="1 of 2 branches missed."> .filter(role -> !role.isBlank())</span>
|
||||
<span class="fc" id="L47"> .toList();</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakJwtAuthenticationConverter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_class">KeycloakJwtAuthenticationConverter</span></div><h1>KeycloakJwtAuthenticationConverter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 36</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="KeycloakJwtAuthenticationConverter.java.html#L30" class="el_method">convert(Jwt)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="KeycloakJwtAuthenticationConverter.java.html#L20" class="el_method">KeycloakJwtAuthenticationConverter(Converter, KeycloakAuthenticatedUserFactory)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="85" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakJwtAuthenticationConverter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">KeycloakJwtAuthenticationConverter.java</span></div><h1>KeycloakJwtAuthenticationConverter.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import com.project.auth.presentation.auth.current.AuthenticatedUser;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.security.authentication.AbstractAuthenticationToken;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
public class KeycloakJwtAuthenticationConverter implements Converter<Jwt, AbstractAuthenticationToken> {
|
||||
|
||||
private final Converter<Jwt, Collection<GrantedAuthority>> authoritiesConverter;
|
||||
private final KeycloakAuthenticatedUserFactory authenticatedUserFactory;
|
||||
|
||||
public KeycloakJwtAuthenticationConverter(
|
||||
Converter<Jwt, Collection<GrantedAuthority>> authoritiesConverter,
|
||||
KeycloakAuthenticatedUserFactory authenticatedUserFactory
|
||||
<span class="fc" id="L20"> ) {</span>
|
||||
<span class="fc" id="L21"> this.authoritiesConverter = Objects.requireNonNull(authoritiesConverter, "authoritiesConverter must not be null");</span>
|
||||
<span class="fc" id="L22"> this.authenticatedUserFactory = Objects.requireNonNull(</span>
|
||||
authenticatedUserFactory,
|
||||
"authenticatedUserFactory must not be null"
|
||||
);
|
||||
<span class="fc" id="L26"> }</span>
|
||||
|
||||
@Override
|
||||
public AbstractAuthenticationToken convert(Jwt jwt) {
|
||||
<span class="fc" id="L30"> Collection<GrantedAuthority> authorities = authoritiesConverter.convert(jwt);</span>
|
||||
<span class="fc" id="L31"> AuthenticatedUser principal = authenticatedUserFactory.create(jwt, authorities);</span>
|
||||
<span class="fc" id="L32"> return new KeycloakJwtAuthenticationToken(jwt, authorities, principal, jwt.getSubject());</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakJwtAuthenticationToken</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_class">KeycloakJwtAuthenticationToken</span></div><h1>KeycloakJwtAuthenticationToken</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 12</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="KeycloakJwtAuthenticationToken.java.html#L20" class="el_method">KeycloakJwtAuthenticationToken(Jwt, Collection, AuthenticatedUser, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="KeycloakJwtAuthenticationToken.java.html#L26" class="el_method">getPrincipal()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakJwtAuthenticationToken.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">KeycloakJwtAuthenticationToken.java</span></div><h1>KeycloakJwtAuthenticationToken.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import com.project.auth.presentation.auth.current.AuthenticatedUser;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class KeycloakJwtAuthenticationToken extends JwtAuthenticationToken {
|
||||
|
||||
private final AuthenticatedUser principal;
|
||||
|
||||
public KeycloakJwtAuthenticationToken(
|
||||
Jwt jwt,
|
||||
Collection<? extends GrantedAuthority> authorities,
|
||||
AuthenticatedUser principal,
|
||||
String name
|
||||
) {
|
||||
<span class="fc" id="L20"> super(jwt, authorities, name);</span>
|
||||
<span class="fc" id="L21"> this.principal = principal;</span>
|
||||
<span class="fc" id="L22"> }</span>
|
||||
|
||||
@Override
|
||||
public AuthenticatedUser getPrincipal() {
|
||||
<span class="fc" id="L26"> return principal;</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityActorIdResolver</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_class">SecurityActorIdResolver</span></div><h1>SecurityActorIdResolver</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">10 of 30</td><td class="ctr2">66%</td><td class="bar">5 of 8</td><td class="ctr2">37%</td><td class="ctr1">3</td><td class="ctr2">6</td><td class="ctr1">2</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="SecurityActorIdResolver.java.html#L16" class="el_method">resolve(HttpServletRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="44" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="75" height="10" title="17" alt="17"/></td><td class="ctr2" id="c1">62%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="75" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">37%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="SecurityActorIdResolver.java.html#L11" class="el_method">SecurityActorIdResolver()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityActorIdResolver.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">SecurityActorIdResolver.java</span></div><h1>SecurityActorIdResolver.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.security.authentication.AnonymousAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
|
||||
import java.security.Principal;
|
||||
|
||||
<span class="fc" id="L11">public class SecurityActorIdResolver {</span>
|
||||
|
||||
private static final String ANONYMOUS_PRINCIPAL = "anonymous";
|
||||
|
||||
public String resolve(HttpServletRequest request) {
|
||||
<span class="fc" id="L16"> Principal principal = request.getUserPrincipal();</span>
|
||||
<span class="fc bfc" id="L17" title="All 2 branches covered."> if (principal != null) {</span>
|
||||
<span class="fc" id="L18"> return LogSanitizer.actorId(principal.getName());</span>
|
||||
}
|
||||
|
||||
<span class="fc" id="L21"> Authentication authentication = SecurityContextHolder.getContext().getAuthentication();</span>
|
||||
<span class="pc bpc" id="L22" title="1 of 2 branches missed."> if (authentication != null</span>
|
||||
<span class="nc bnc" id="L23" title="All 4 branches missed."> && authentication.isAuthenticated()</span>
|
||||
&& !(authentication instanceof AnonymousAuthenticationToken)) {
|
||||
<span class="nc" id="L25"> return LogSanitizer.actorId(authentication.getName());</span>
|
||||
}
|
||||
|
||||
<span class="fc" id="L28"> return LogSanitizer.actorId(ANONYMOUS_PRINCIPAL);</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityAuditTrailWriter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_class">SecurityAuditTrailWriter</span></div><h1>SecurityAuditTrailWriter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 64</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">16</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="SecurityAuditTrailWriter.java.html#L22" class="el_method">record(HttpServletRequest, AuthAuditEventType, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="51" alt="51"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="SecurityAuditTrailWriter.java.html#L12" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="SecurityAuditTrailWriter.java.html#L17" class="el_method">SecurityAuditTrailWriter(SecurityActorIdResolver)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityAuditTrailWriter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">SecurityAuditTrailWriter.java</span></div><h1>SecurityAuditTrailWriter.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import com.project.auth.application.support.audit.AuthAuditEventType;
|
||||
import com.project.auth.application.support.audit.AuthAuditFields;
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class SecurityAuditTrailWriter {
|
||||
|
||||
<span class="fc" id="L12"> private static final Logger log = LoggerFactory.getLogger(SecurityAuditTrailWriter.class);</span>
|
||||
<span class="fc" id="L13"> private static final Logger audit = LoggerFactory.getLogger("audit.auth");</span>
|
||||
|
||||
private final SecurityActorIdResolver actorIdResolver;
|
||||
|
||||
<span class="fc" id="L17"> public SecurityAuditTrailWriter(SecurityActorIdResolver actorIdResolver) {</span>
|
||||
<span class="fc" id="L18"> this.actorIdResolver = actorIdResolver;</span>
|
||||
<span class="fc" id="L19"> }</span>
|
||||
|
||||
public void record(HttpServletRequest request, AuthAuditEventType eventType, String message) {
|
||||
<span class="fc" id="L22"> String actorId = actorIdResolver.resolve(request);</span>
|
||||
<span class="fc" id="L23"> String requestPath = LogSanitizer.requestPath(request.getRequestURI());</span>
|
||||
<span class="fc" id="L24"> log.warn(</span>
|
||||
"{} actorId={} method={} requestPath={}",
|
||||
message,
|
||||
actorId,
|
||||
<span class="fc" id="L28"> request.getMethod(),</span>
|
||||
requestPath
|
||||
);
|
||||
<span class="fc" id="L31"> audit.atWarn()</span>
|
||||
<span class="fc" id="L32"> .addKeyValue(AuthAuditFields.EVENT_TYPE, eventType.code())</span>
|
||||
<span class="fc" id="L33"> .addKeyValue(AuthAuditFields.ACTOR_ID, actorId)</span>
|
||||
<span class="fc" id="L34"> .addKeyValue(AuthAuditFields.METHOD, request.getMethod())</span>
|
||||
<span class="fc" id="L35"> .addKeyValue(AuthAuditFields.REQUEST_PATH, requestPath)</span>
|
||||
<span class="fc" id="L36"> .log(eventType.code());</span>
|
||||
<span class="fc" id="L37"> }</span>
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityExceptionHandler.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.auth.security</a> > <span class="el_source">SecurityExceptionHandler.java</span></div><h1>SecurityExceptionHandler.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth.security;
|
||||
|
||||
import com.project.auth.application.support.audit.AuthAuditEventType;
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.web.AuthenticationEntryPoint;
|
||||
import org.springframework.security.web.access.AccessDeniedHandler;
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class SecurityExceptionHandler implements AuthenticationEntryPoint, AccessDeniedHandler {
|
||||
|
||||
<span class="fc" id="L19"> private static final Logger log = LoggerFactory.getLogger(SecurityExceptionHandler.class);</span>
|
||||
|
||||
private final HandlerExceptionResolver handlerExceptionResolver;
|
||||
private final SecurityAuditTrailWriter securityAuditTrailWriter;
|
||||
|
||||
public SecurityExceptionHandler(
|
||||
HandlerExceptionResolver handlerExceptionResolver,
|
||||
SecurityAuditTrailWriter securityAuditTrailWriter
|
||||
<span class="fc" id="L27"> ) {</span>
|
||||
<span class="fc" id="L28"> this.handlerExceptionResolver = Objects.requireNonNull(</span>
|
||||
handlerExceptionResolver,
|
||||
"handlerExceptionResolver must not be null"
|
||||
);
|
||||
<span class="fc" id="L32"> this.securityAuditTrailWriter = Objects.requireNonNull(</span>
|
||||
securityAuditTrailWriter,
|
||||
"securityAuditTrailWriter must not be null"
|
||||
);
|
||||
<span class="fc" id="L36"> }</span>
|
||||
|
||||
@Override
|
||||
public void commence(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
AuthenticationException authException
|
||||
) {
|
||||
<span class="fc" id="L44"> recordAudit(request, AuthAuditEventType.AUTHENTICATION_REQUIRED, "Authentication required.");</span>
|
||||
<span class="pc bpc" id="L45" title="1 of 2 branches missed."> if (response.isCommitted()) {</span>
|
||||
<span class="nc" id="L46"> log.warn("Response already committed; cannot render authentication error body. requestPath={}",</span>
|
||||
<span class="nc" id="L47"> LogSanitizer.requestPath(request.getRequestURI()));</span>
|
||||
<span class="nc" id="L48"> return;</span>
|
||||
}
|
||||
<span class="fc" id="L50"> handlerExceptionResolver.resolveException(request, response, null, authException);</span>
|
||||
<span class="fc" id="L51"> }</span>
|
||||
|
||||
@Override
|
||||
public void handle(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
AccessDeniedException accessDeniedException
|
||||
) {
|
||||
<span class="fc" id="L59"> recordAudit(request, AuthAuditEventType.ACCESS_DENIED, "Access denied.");</span>
|
||||
<span class="pc bpc" id="L60" title="1 of 2 branches missed."> if (response.isCommitted()) {</span>
|
||||
<span class="nc" id="L61"> log.warn("Response already committed; cannot render access-denied error body. requestPath={}",</span>
|
||||
<span class="nc" id="L62"> LogSanitizer.requestPath(request.getRequestURI()));</span>
|
||||
<span class="nc" id="L63"> return;</span>
|
||||
}
|
||||
<span class="fc" id="L65"> handlerExceptionResolver.resolveException(request, response, null, accessDeniedException);</span>
|
||||
<span class="fc" id="L66"> }</span>
|
||||
|
||||
private void recordAudit(HttpServletRequest request, AuthAuditEventType type, String description) {
|
||||
try {
|
||||
<span class="fc" id="L70"> securityAuditTrailWriter.record(request, type, description);</span>
|
||||
<span class="nc" id="L71"> } catch (RuntimeException auditFailure) {</span>
|
||||
<span class="nc" id="L72"> log.warn("Security audit write failed; continuing with response rendering. type={}",</span>
|
||||
type, auditFailure);
|
||||
<span class="fc" id="L74"> }</span>
|
||||
<span class="fc" id="L75"> }</span>
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditLoggingConfiguration.AuthAuditEventLogListener</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.logging</a> > <span class="el_class">AuthAuditLoggingConfiguration.AuthAuditEventLogListener</span></div><h1>AuthAuditLoggingConfiguration.AuthAuditEventLogListener</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 36</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">6</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="AuthAuditLoggingConfiguration.java.html#L35" class="el_method">onAuthAuditEvent(AuthAuditEvent)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="26" alt="26"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="AuthAuditLoggingConfiguration.java.html#L37" class="el_method">lambda$onAuthAuditEvent$0(LoggingEventBuilder, String, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="AuthAuditLoggingConfiguration.java.html#L31" class="el_method">AuthAuditLoggingConfiguration.AuthAuditEventLogListener()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditLoggingConfiguration.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.logging</a> > <span class="el_source">AuthAuditLoggingConfiguration.java</span></div><h1>AuthAuditLoggingConfiguration.java</h1><pre class="source lang-java linenums">package com.project.auth.config.logging;
|
||||
|
||||
import com.project.auth.application.support.audit.AuditLevel;
|
||||
import com.project.auth.application.support.audit.AuthAuditEvent;
|
||||
import com.project.auth.application.support.audit.AuthAuditEventPublisher;
|
||||
import com.project.auth.application.support.audit.AuthAuditFields;
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.spi.LoggingEventBuilder;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.event.EventListener;
|
||||
|
||||
@Configuration
|
||||
public class AuthAuditLoggingConfiguration {
|
||||
|
||||
private static final Logger audit = LoggerFactory.getLogger("audit.auth");
|
||||
|
||||
@Bean
|
||||
public AuthAuditEventPublisher authAuditEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
|
||||
return applicationEventPublisher::publishEvent;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public AuthAuditEventLogListener authAuditEventListener() {
|
||||
return new AuthAuditEventLogListener();
|
||||
}
|
||||
|
||||
<span class="fc" id="L31"> static final class AuthAuditEventLogListener {</span>
|
||||
|
||||
@EventListener
|
||||
public void onAuthAuditEvent(AuthAuditEvent event) {
|
||||
<span class="fc bfc" id="L35" title="All 2 branches covered."> LoggingEventBuilder builder = event.level() == AuditLevel.WARN ? audit.atWarn() : audit.atInfo();</span>
|
||||
<span class="fc" id="L36"> builder.addKeyValue(AuthAuditFields.EVENT_TYPE, event.eventType());</span>
|
||||
<span class="fc" id="L37"> event.fields().forEach((key, value) -> builder.addKeyValue(key, LogSanitizer.normalize(value)));</span>
|
||||
<span class="fc" id="L38"> builder.log(event.eventType());</span>
|
||||
<span class="fc" id="L39"> }</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.config.logging</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <span class="el_package">com.project.auth.config.logging</span></div><h1>com.project.auth.config.logging</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 36</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">6</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AuthAuditLoggingConfiguration$AuthAuditEventLogListener.html" class="el_class">AuthAuditLoggingConfiguration.AuthAuditEventLogListener</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.config.logging</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <span class="el_package">com.project.auth.config.logging</span></div><h1>com.project.auth.config.logging</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 36</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">6</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AuthAuditLoggingConfiguration.java.html" class="el_source">AuthAuditLoggingConfiguration.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiErrorController.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.web</a> > <span class="el_source">ApiErrorController.java</span></div><h1>ApiErrorController.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
|
||||
|
||||
import com.project.auth.application.support.exception.ClientFacingErrorCode;
|
||||
import com.project.auth.application.support.exception.CommonErrorCode;
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import com.project.auth.presentation.support.exception.PresentationErrorCode;
|
||||
import com.project.auth.presentation.support.response.ApiResult;
|
||||
import com.project.auth.presentation.support.response.ApiResultFactory;
|
||||
import jakarta.servlet.RequestDispatcher;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.webmvc.error.ErrorController;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* {@code @RestControllerAdvice}를 우회하는 요청(필터에서 던져진 예외,
|
||||
* {@code response.sendError(...)} 호출, 컨테이너 레벨 라우팅 실패, 다른 핸들러 내부의
|
||||
* 이중 폴트 등)에 대한 최후의 에러 렌더러.
|
||||
*
|
||||
* 컨테이너가 결정한 상태 코드는 그대로 보존하고, 본문만 {@link ApiResult} 형태로 정규화한다.
|
||||
* 5xx는 내부 분류 노출을 막기 위해 {@code COMMON-999}로 정규화하고, 4xx는
|
||||
* {@link PresentationErrorCode} 기반 코드로 매핑하여 클라이언트 SDK가
|
||||
* "요청이 잘못됐다"와 "서버가 깨졌다"를 구분할 수 있게 한다.
|
||||
*
|
||||
* 의존성 정책: 이 컨트롤러는 Spring Boot의 ErrorAttributes를 사용하지 않는다.
|
||||
* 필요한 정보(상태 코드, 원인 예외, 원래 요청 경로)는 모두 서블릿 표준
|
||||
* RequestDispatcher.ERROR_* attribute로부터 직접 추출한다. 이렇게 두면
|
||||
* ErrorAttributeOptions의 변경(예: 스택트레이스 포함)이 이 컨트롤러가 노출하는 정보를
|
||||
* 본의 아니게 확장하지 못하며, 빈 의존 그래프도 작아진다.
|
||||
*/
|
||||
@RestController
|
||||
class ApiErrorController implements ErrorController {
|
||||
|
||||
<span class="fc" id="L40"> private static final Logger log = LoggerFactory.getLogger(ApiErrorController.class);</span>
|
||||
|
||||
private final ApiResultFactory apiResultFactory;
|
||||
|
||||
<span class="fc" id="L44"> ApiErrorController(ApiResultFactory apiResultFactory) {</span>
|
||||
<span class="fc" id="L45"> this.apiResultFactory = Objects.requireNonNull(apiResultFactory, "apiResultFactory must not be null");</span>
|
||||
<span class="fc" id="L46"> }</span>
|
||||
|
||||
@RequestMapping("/error")
|
||||
ResponseEntity<ApiResult<Void>> error(HttpServletRequest request) {
|
||||
<span class="fc" id="L50"> int rawStatus = resolveStatusCode(request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE));</span>
|
||||
<span class="fc" id="L51"> HttpStatus httpStatus = safeStatus(rawStatus);</span>
|
||||
<span class="fc" id="L52"> Throwable error = resolveError(request);</span>
|
||||
<span class="fc" id="L53"> String requestPath = LogSanitizer.requestPath(originalRequestPath(request));</span>
|
||||
<span class="fc" id="L54"> String method = request.getMethod();</span>
|
||||
|
||||
<span class="pc bpc" id="L56" title="1 of 4 branches missed."> if (httpStatus.is5xxServerError() && error != null) {</span>
|
||||
<span class="nc" id="L57"> log.error("Unhandled exception. method={} requestPath={} status={}",</span>
|
||||
<span class="nc" id="L58"> method, requestPath, httpStatus.value(), error);</span>
|
||||
<span class="fc bfc" id="L59" title="All 2 branches covered."> } else if (httpStatus.is5xxServerError()) {</span>
|
||||
<span class="fc" id="L60"> log.error("Unhandled error response. method={} requestPath={} status={}",</span>
|
||||
<span class="fc" id="L61"> method, requestPath, httpStatus.value());</span>
|
||||
} else {
|
||||
<span class="fc" id="L63"> log.warn("Unhandled error response. method={} requestPath={} status={}",</span>
|
||||
<span class="fc" id="L64"> method, requestPath, httpStatus.value());</span>
|
||||
}
|
||||
|
||||
<span class="fc" id="L67"> ClientFacingErrorCode errorCode = classify(httpStatus);</span>
|
||||
|
||||
<span class="fc" id="L69"> return ResponseEntity.status(httpStatus)</span>
|
||||
<span class="fc" id="L70"> .body(apiResultFactory.failure(errorCode.code(), errorCode.message()));</span>
|
||||
}
|
||||
|
||||
private static ClientFacingErrorCode classify(HttpStatus status) {
|
||||
<span class="fc bfc" id="L74" title="All 2 branches covered."> if (status.is5xxServerError()) {</span>
|
||||
<span class="fc" id="L75"> return CommonErrorCode.INTERNAL_SERVER_ERROR;</span>
|
||||
}
|
||||
<span class="pc bpc" id="L77" title="3 of 6 branches missed."> return switch (status) {</span>
|
||||
<span class="fc" id="L78"> case NOT_FOUND -> PresentationErrorCode.RESOURCE_NOT_FOUND;</span>
|
||||
<span class="fc" id="L79"> case METHOD_NOT_ALLOWED -> PresentationErrorCode.METHOD_NOT_ALLOWED;</span>
|
||||
<span class="nc" id="L80"> case UNSUPPORTED_MEDIA_TYPE -> PresentationErrorCode.UNSUPPORTED_MEDIA_TYPE;</span>
|
||||
<span class="nc" id="L81"> case NOT_ACCEPTABLE -> PresentationErrorCode.NOT_ACCEPTABLE;</span>
|
||||
<span class="nc" id="L82"> case CONTENT_TOO_LARGE -> PresentationErrorCode.PAYLOAD_TOO_LARGE;</span>
|
||||
<span class="fc" id="L83"> default -> PresentationErrorCode.UNHANDLED_CLIENT_ERROR;</span>
|
||||
};
|
||||
}
|
||||
|
||||
private static HttpStatus safeStatus(int rawStatus) {
|
||||
try {
|
||||
<span class="fc" id="L89"> return HttpStatus.valueOf(rawStatus);</span>
|
||||
<span class="fc" id="L90"> } catch (IllegalArgumentException ignored) {</span>
|
||||
<span class="fc" id="L91"> return HttpStatus.INTERNAL_SERVER_ERROR;</span>
|
||||
}
|
||||
}
|
||||
|
||||
private static int resolveStatusCode(Object status) {
|
||||
<span class="fc bfc" id="L96" title="All 2 branches covered."> if (status instanceof Integer value) {</span>
|
||||
<span class="fc" id="L97"> return value;</span>
|
||||
}
|
||||
<span class="fc" id="L99"> return HttpStatus.INTERNAL_SERVER_ERROR.value();</span>
|
||||
}
|
||||
|
||||
private static String originalRequestPath(HttpServletRequest request) {
|
||||
<span class="fc" id="L103"> Object path = request.getAttribute(RequestDispatcher.ERROR_REQUEST_URI);</span>
|
||||
<span class="pc bpc" id="L104" title="1 of 4 branches missed."> if (path instanceof String requestUri && !requestUri.isBlank()) {</span>
|
||||
<span class="fc" id="L105"> return requestUri;</span>
|
||||
}
|
||||
<span class="fc" id="L107"> return request.getRequestURI();</span>
|
||||
}
|
||||
|
||||
private static Throwable resolveError(HttpServletRequest request) {
|
||||
<span class="fc" id="L111"> Object exception = request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);</span>
|
||||
<span class="pc bpc" id="L112" title="1 of 2 branches missed."> return exception instanceof Throwable throwable ? throwable : null;</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>InfrastructureExceptionHandler</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.web</a> > <span class="el_class">InfrastructureExceptionHandler</span></div><h1>InfrastructureExceptionHandler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 80</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">19</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="InfrastructureExceptionHandler.java.html#L42" class="el_method">handleInfrastructureException(InfrastructureException, HttpServletRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="InfrastructureExceptionHandler.java.html#L62" class="el_method">handleLeakedDomainException(DomainException, HttpServletRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="101" height="10" title="32" alt="32"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="InfrastructureExceptionHandler.java.html#L33" class="el_method">InfrastructureExceptionHandler(ApiResultFactory)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="InfrastructureExceptionHandler.java.html#L29" class="el_method">static {...}</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>InfrastructureExceptionHandler.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.web</a> > <span class="el_source">InfrastructureExceptionHandler.java</span></div><h1>InfrastructureExceptionHandler.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
|
||||
|
||||
import com.project.auth.application.support.exception.CommonErrorCode;
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import com.project.auth.domain.user.exception.DomainException;
|
||||
import com.project.auth.infrastructure.support.exception.InfrastructureException;
|
||||
import com.project.auth.presentation.support.exception.ApiErrorHttpStatusMapper;
|
||||
import com.project.auth.presentation.support.response.ApiResult;
|
||||
import com.project.auth.presentation.support.response.ApiResultFactory;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
/**
|
||||
* InfrastructureErrorCode is kept as an internal classification for logs and alerting.
|
||||
* Client responses are intentionally normalized to COMMON-999 to avoid exposing internal dependency details.
|
||||
* This advice stays in bootstrap because moving it to presentation would create a
|
||||
* presentation -> infrastructure dependency and break the layer rule.
|
||||
*/
|
||||
@RestControllerAdvice
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
public class InfrastructureExceptionHandler {
|
||||
|
||||
<span class="fc" id="L29"> private static final Logger log = LoggerFactory.getLogger(InfrastructureExceptionHandler.class);</span>
|
||||
|
||||
private final ApiResultFactory apiResultFactory;
|
||||
|
||||
<span class="fc" id="L33"> public InfrastructureExceptionHandler(ApiResultFactory apiResultFactory) {</span>
|
||||
<span class="fc" id="L34"> this.apiResultFactory = apiResultFactory;</span>
|
||||
<span class="fc" id="L35"> }</span>
|
||||
|
||||
@ExceptionHandler(InfrastructureException.class)
|
||||
public ResponseEntity<ApiResult<Void>> handleInfrastructureException(
|
||||
InfrastructureException exception,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
<span class="fc" id="L42"> log.error(</span>
|
||||
"Infrastructure failure. errorCode={} method={} requestPath={}",
|
||||
<span class="fc" id="L44"> exception.getErrorCode().code(),</span>
|
||||
<span class="fc" id="L45"> request.getMethod(),</span>
|
||||
<span class="fc" id="L46"> LogSanitizer.requestPath(request.getRequestURI()),</span>
|
||||
exception
|
||||
);
|
||||
|
||||
<span class="fc" id="L50"> return ResponseEntity.status(ApiErrorHttpStatusMapper.map(CommonErrorCode.INTERNAL_SERVER_ERROR))</span>
|
||||
<span class="fc" id="L51"> .body(apiResultFactory.failure(</span>
|
||||
<span class="fc" id="L52"> CommonErrorCode.INTERNAL_SERVER_ERROR.code(),</span>
|
||||
<span class="fc" id="L53"> CommonErrorCode.INTERNAL_SERVER_ERROR.message()</span>
|
||||
));
|
||||
}
|
||||
|
||||
@ExceptionHandler(DomainException.class)
|
||||
public ResponseEntity<ApiResult<Void>> handleLeakedDomainException(
|
||||
DomainException exception,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
<span class="fc" id="L62"> log.error(</span>
|
||||
"Leaked domain exception. method={} requestPath={}",
|
||||
<span class="fc" id="L64"> request.getMethod(),</span>
|
||||
<span class="fc" id="L65"> LogSanitizer.requestPath(request.getRequestURI()),</span>
|
||||
exception
|
||||
);
|
||||
|
||||
<span class="fc" id="L69"> return ResponseEntity.status(ApiErrorHttpStatusMapper.map(CommonErrorCode.INTERNAL_SERVER_ERROR))</span>
|
||||
<span class="fc" id="L70"> .body(apiResultFactory.failure(</span>
|
||||
<span class="fc" id="L71"> CommonErrorCode.INTERNAL_SERVER_ERROR.code(),</span>
|
||||
<span class="fc" id="L72"> CommonErrorCode.INTERNAL_SERVER_ERROR.message()</span>
|
||||
));
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RequestAccessLogFilter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.web</a> > <span class="el_source">RequestAccessLogFilter.java</span></div><h1>RequestAccessLogFilter.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
|
||||
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public class RequestAccessLogFilter extends OncePerRequestFilter {
|
||||
|
||||
<span class="fc" id="L19"> private static final Logger log = LoggerFactory.getLogger("http.access");</span>
|
||||
private static final String ACCESS_EVENT_TYPE = "HTTP_ACCESS";
|
||||
|
||||
private final List<String> excludedPathPrefixes;
|
||||
|
||||
<span class="fc" id="L24"> public RequestAccessLogFilter(AccessLogProperties accessLogProperties) {</span>
|
||||
<span class="fc bfc" id="L25" title="All 2 branches covered."> this.excludedPathPrefixes = accessLogProperties.excludedPathPrefixes() == null</span>
|
||||
<span class="fc" id="L26"> ? List.of()</span>
|
||||
<span class="fc" id="L27"> : List.copyOf(accessLogProperties.excludedPathPrefixes());</span>
|
||||
<span class="fc" id="L28"> }</span>
|
||||
|
||||
@Override
|
||||
protected boolean shouldNotFilter(HttpServletRequest request) {
|
||||
<span class="fc" id="L32"> String path = request.getRequestURI();</span>
|
||||
<span class="fc" id="L33"> return excludedPathPrefixes.stream().anyMatch(path::startsWith);</span>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldNotFilterAsyncDispatch() {
|
||||
<span class="nc" id="L38"> return true;</span>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldNotFilterErrorDispatch() {
|
||||
<span class="nc" id="L43"> return true;</span>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
FilterChain filterChain) throws ServletException, IOException {
|
||||
<span class="fc" id="L51"> long startTime = System.nanoTime();</span>
|
||||
|
||||
try {
|
||||
<span class="fc" id="L54"> filterChain.doFilter(request, response);</span>
|
||||
} finally {
|
||||
<span class="fc" id="L56"> long durationMs = (System.nanoTime() - startTime) / 1_000_000;</span>
|
||||
<span class="fc" id="L57"> logRequestSummary(request, response, durationMs);</span>
|
||||
}
|
||||
<span class="fc" id="L59"> }</span>
|
||||
|
||||
private void logRequestSummary(HttpServletRequest request, HttpServletResponse response, long durationMs) {
|
||||
<span class="fc" id="L62"> String method = request.getMethod();</span>
|
||||
<span class="fc" id="L63"> String path = LogSanitizer.requestPath(request.getRequestURI());</span>
|
||||
<span class="fc" id="L64"> int status = response.getStatus();</span>
|
||||
<span class="fc" id="L65"> String remoteIp = LogSanitizer.clientIp(request.getRemoteAddr());</span>
|
||||
<span class="fc" id="L66"> String actorId = resolveActorId();</span>
|
||||
<span class="pc bpc" id="L67" title="1 of 2 branches missed."> String result = status < 400 ? "success" : "failure";</span>
|
||||
|
||||
<span class="fc" id="L69"> log.atInfo()</span>
|
||||
<span class="fc" id="L70"> .addKeyValue("eventType", ACCESS_EVENT_TYPE)</span>
|
||||
<span class="fc" id="L71"> .addKeyValue("method", method)</span>
|
||||
<span class="fc" id="L72"> .addKeyValue("requestPath", path)</span>
|
||||
<span class="fc" id="L73"> .addKeyValue("status", status)</span>
|
||||
<span class="fc" id="L74"> .addKeyValue("durationMs", durationMs)</span>
|
||||
<span class="fc" id="L75"> .addKeyValue("remoteIp", remoteIp)</span>
|
||||
<span class="fc" id="L76"> .addKeyValue("actorId", actorId)</span>
|
||||
<span class="fc" id="L77"> .addKeyValue("result", result)</span>
|
||||
<span class="fc" id="L78"> .log("ACCESS");</span>
|
||||
<span class="fc" id="L79"> }</span>
|
||||
|
||||
private String resolveActorId() {
|
||||
<span class="fc" id="L82"> Authentication authentication = SecurityContextHolder.getContext().getAuthentication();</span>
|
||||
<span class="pc bpc" id="L83" title="1 of 4 branches missed."> if (authentication != null && authentication.isAuthenticated()</span>
|
||||
<span class="pc bpc" id="L84" title="1 of 2 branches missed."> && !"anonymousUser".equals(authentication.getPrincipal())) {</span>
|
||||
<span class="fc" id="L85"> return LogSanitizer.actorId(authentication.getName());</span>
|
||||
}
|
||||
<span class="fc" id="L87"> return LogSanitizer.actorId("anonymous");</span>
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RequestBoundApiResultFactory.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.web</a> > <span class="el_source">RequestBoundApiResultFactory.java</span></div><h1>RequestBoundApiResultFactory.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
|
||||
|
||||
import com.project.auth.presentation.support.response.ApiResult;
|
||||
import com.project.auth.presentation.support.response.ApiResultFactory;
|
||||
import org.slf4j.MDC;
|
||||
|
||||
import java.time.Clock;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class RequestBoundApiResultFactory implements ApiResultFactory {
|
||||
|
||||
private static final String TRACE_ID_KEY = "traceId";
|
||||
/**
|
||||
* MDC에 traceId가 없을 때 사용하는 sentinel. JSON {@code null}로 그대로 두면
|
||||
* TraceIdFilter가 누락/오설정된 사실이 가려지므로, 명시적인 placeholder 문자열로
|
||||
* 로그·대시보드에서 즉시 식별 가능하게 한다.
|
||||
*/
|
||||
static final String MISSING_TRACE_ID = "-";
|
||||
<span class="fc" id="L22"> private static final DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ISO_INSTANT;</span>
|
||||
|
||||
private final Clock clock;
|
||||
|
||||
<span class="fc" id="L26"> public RequestBoundApiResultFactory(Clock clock) {</span>
|
||||
<span class="fc" id="L27"> this.clock = Objects.requireNonNull(clock, "clock must not be null");</span>
|
||||
<span class="fc" id="L28"> }</span>
|
||||
|
||||
@Override
|
||||
public <T> ApiResult<T> success(String code, String message, T data) {
|
||||
<span class="fc" id="L32"> return result(true, code, message, data, null);</span>
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> success(String code, String message) {
|
||||
<span class="nc" id="L37"> return result(true, code, message, null, null);</span>
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> failure(String code, String message) {
|
||||
<span class="fc" id="L42"> return result(false, code, message, null, null);</span>
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> failure(String code, String message, Map<String, List<String>> errors) {
|
||||
<span class="fc" id="L47"> return result(false, code, message, null, errors);</span>
|
||||
}
|
||||
|
||||
private <T> ApiResult<T> result(
|
||||
boolean success,
|
||||
String code,
|
||||
String message,
|
||||
T data,
|
||||
Map<String, List<String>> errors
|
||||
) {
|
||||
<span class="fc" id="L57"> String traceId = MDC.get(TRACE_ID_KEY);</span>
|
||||
<span class="fc" id="L58"> return new ApiResult<>(</span>
|
||||
success,
|
||||
code,
|
||||
message,
|
||||
data,
|
||||
errors,
|
||||
<span class="fc bfc" id="L64" title="All 4 branches covered."> traceId == null || traceId.isBlank() ? MISSING_TRACE_ID : traceId,</span>
|
||||
<span class="fc" id="L65"> TIMESTAMP_FORMATTER.format(clock.instant())</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityResponseExceptionHandler.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.web</a> > <span class="el_source">SecurityResponseExceptionHandler.java</span></div><h1>SecurityResponseExceptionHandler.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
|
||||
|
||||
import com.project.auth.application.support.audit.AuthAuditEventType;
|
||||
import com.project.auth.application.support.exception.AuthErrorCode;
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import com.project.auth.config.auth.security.SecurityAuditTrailWriter;
|
||||
import com.project.auth.presentation.support.exception.ApiErrorHttpStatusMapper;
|
||||
import com.project.auth.presentation.support.response.ApiResult;
|
||||
import com.project.auth.presentation.support.response.ApiResultFactory;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.authentication.AnonymousAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Spring Security 예외를 처리하는 bootstrap 계층 advice.
|
||||
*
|
||||
* presentation 모듈은 ArchUnit 규칙에 의해 org.springframework.security.core / context에
|
||||
* 직접 의존할 수 없으므로(LayerDependencyArchitectureTest 참고), 이 advice는 bootstrap에 둔다.
|
||||
*
|
||||
* AccessDeniedException은 현재 인증 상태에 따라 401/403으로 분기한다. 익명 principal이
|
||||
* 보호된 리소스에 접근한 경우는 인증이 필요하다는 의미로 401을 반환하고, 인증된 principal이
|
||||
* 권한이 부족한 경우에만 403을 반환한다. Spring Security의 ExceptionTranslationFilter가
|
||||
* 필터 단계에서 던지는 예외에 대해 적용하는 분기 로직을 컨트롤러 단(@PreAuthorize 등 메서드
|
||||
* 보안)에서 던져진 동일 예외에도 일관되게 적용한 것이다.
|
||||
*
|
||||
* Audit 정책: 이 advice의 모든 분기(인증 필요, 익명 401, 인증된 사용자 403)는
|
||||
* SecurityAuditTrailWriter로 audit를 기록한다. 필터 단의 SecurityExceptionHandler가
|
||||
* 기록하는 audit 채널과 동일 채널을 사용하므로, "필터 단/컨트롤러 단" 어느 경로로 들어와도
|
||||
* 보안 이벤트가 누락 없이 동일 형태로 적재된다.
|
||||
*
|
||||
* 스레드/익명 판정: SecurityContextHolder의 ThreadLocal 컨텍스트를 우선 보지만,
|
||||
* 비동기 컨트롤러로 컨텍스트가 워커 스레드로 전파되지 않은 케이스를 대비해
|
||||
* HttpServletRequest.getUserPrincipal()을 보조 신호로 사용한다. principal이 명시적으로
|
||||
* 존재하면 익명으로 분류하지 않는다 — 컨텍스트가 비어 있더라도 인증된 사용자가 잘못
|
||||
* 401로 분류되지 않도록 보호하는 방어적 폴백이다.
|
||||
*/
|
||||
@RestControllerAdvice
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE + 5)
|
||||
public class SecurityResponseExceptionHandler {
|
||||
|
||||
<span class="fc" id="L53"> private static final Logger log = LoggerFactory.getLogger(SecurityResponseExceptionHandler.class);</span>
|
||||
|
||||
private final ApiResultFactory apiResultFactory;
|
||||
private final SecurityAuditTrailWriter securityAuditTrailWriter;
|
||||
|
||||
public SecurityResponseExceptionHandler(
|
||||
ApiResultFactory apiResultFactory,
|
||||
SecurityAuditTrailWriter securityAuditTrailWriter
|
||||
<span class="fc" id="L61"> ) {</span>
|
||||
<span class="fc" id="L62"> this.apiResultFactory = Objects.requireNonNull(apiResultFactory, "apiResultFactory must not be null");</span>
|
||||
<span class="fc" id="L63"> this.securityAuditTrailWriter = Objects.requireNonNull(</span>
|
||||
securityAuditTrailWriter, "securityAuditTrailWriter must not be null");
|
||||
<span class="fc" id="L65"> }</span>
|
||||
|
||||
@ExceptionHandler(AuthenticationException.class)
|
||||
public ResponseEntity<ApiResult<Void>> handleAuthenticationException(
|
||||
AuthenticationException exception,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
<span class="fc" id="L72"> log.warn("Authentication required. exceptionType={} method={} requestPath={} errorCode={}",</span>
|
||||
<span class="fc" id="L73"> exception.getClass().getSimpleName(),</span>
|
||||
<span class="fc" id="L74"> request.getMethod(),</span>
|
||||
<span class="fc" id="L75"> LogSanitizer.requestPath(request.getRequestURI()),</span>
|
||||
<span class="fc" id="L76"> AuthErrorCode.AUTHENTICATION_REQUIRED.code());</span>
|
||||
<span class="fc" id="L77"> recordAudit(request, AuthAuditEventType.AUTHENTICATION_REQUIRED, "Authentication required.");</span>
|
||||
|
||||
<span class="fc" id="L79"> return ResponseEntity.status(ApiErrorHttpStatusMapper.map(AuthErrorCode.AUTHENTICATION_REQUIRED))</span>
|
||||
<span class="fc" id="L80"> .body(apiResultFactory.failure(</span>
|
||||
<span class="fc" id="L81"> AuthErrorCode.AUTHENTICATION_REQUIRED.code(),</span>
|
||||
<span class="fc" id="L82"> AuthErrorCode.AUTHENTICATION_REQUIRED.message()</span>
|
||||
));
|
||||
}
|
||||
|
||||
@ExceptionHandler(AccessDeniedException.class)
|
||||
public ResponseEntity<ApiResult<Void>> handleAccessDeniedException(
|
||||
AccessDeniedException exception,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
<span class="pc bpc" id="L91" title="1 of 2 branches missed."> if (isAnonymous(SecurityContextHolder.getContext().getAuthentication(), request)) {</span>
|
||||
<span class="nc" id="L92"> log.warn("AccessDenied for anonymous principal -> 401. exceptionType={} method={} requestPath={} errorCode={}",</span>
|
||||
<span class="nc" id="L93"> exception.getClass().getSimpleName(),</span>
|
||||
<span class="nc" id="L94"> request.getMethod(),</span>
|
||||
<span class="nc" id="L95"> LogSanitizer.requestPath(request.getRequestURI()),</span>
|
||||
<span class="nc" id="L96"> AuthErrorCode.AUTHENTICATION_REQUIRED.code());</span>
|
||||
<span class="nc" id="L97"> recordAudit(request, AuthAuditEventType.AUTHENTICATION_REQUIRED,</span>
|
||||
"Authentication required (AccessDenied for anonymous).");
|
||||
|
||||
<span class="nc" id="L100"> return ResponseEntity.status(ApiErrorHttpStatusMapper.map(AuthErrorCode.AUTHENTICATION_REQUIRED))</span>
|
||||
<span class="nc" id="L101"> .body(apiResultFactory.failure(</span>
|
||||
<span class="nc" id="L102"> AuthErrorCode.AUTHENTICATION_REQUIRED.code(),</span>
|
||||
<span class="nc" id="L103"> AuthErrorCode.AUTHENTICATION_REQUIRED.message()</span>
|
||||
));
|
||||
}
|
||||
|
||||
<span class="fc" id="L107"> log.warn("Access denied for authenticated principal. exceptionType={} method={} requestPath={} errorCode={}",</span>
|
||||
<span class="fc" id="L108"> exception.getClass().getSimpleName(),</span>
|
||||
<span class="fc" id="L109"> request.getMethod(),</span>
|
||||
<span class="fc" id="L110"> LogSanitizer.requestPath(request.getRequestURI()),</span>
|
||||
<span class="fc" id="L111"> AuthErrorCode.ACCESS_DENIED.code());</span>
|
||||
<span class="fc" id="L112"> recordAudit(request, AuthAuditEventType.ACCESS_DENIED, "Access denied.");</span>
|
||||
|
||||
<span class="fc" id="L114"> return ResponseEntity.status(ApiErrorHttpStatusMapper.map(AuthErrorCode.ACCESS_DENIED))</span>
|
||||
<span class="fc" id="L115"> .body(apiResultFactory.failure(</span>
|
||||
<span class="fc" id="L116"> AuthErrorCode.ACCESS_DENIED.code(),</span>
|
||||
<span class="fc" id="L117"> AuthErrorCode.ACCESS_DENIED.message()</span>
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* SecurityContext가 비어 있어도 서블릿 principal이 명시적으로 존재하면 익명이 아니다.
|
||||
* ThreadLocal 컨텍스트가 비동기 워커 스레드로 전파되지 않은 케이스에서 인증된 사용자가
|
||||
* 잘못 401로 분류되는 사고를 막기 위한 방어적 폴백.
|
||||
*/
|
||||
private static boolean isAnonymous(Authentication authentication, HttpServletRequest request) {
|
||||
<span class="pc bpc" id="L127" title="1 of 2 branches missed."> if (request.getUserPrincipal() != null) {</span>
|
||||
<span class="fc" id="L128"> return false;</span>
|
||||
}
|
||||
<span class="nc bnc" id="L130" title="All 2 branches missed."> return authentication == null</span>
|
||||
<span class="nc bnc" id="L131" title="All 4 branches missed."> || !authentication.isAuthenticated()</span>
|
||||
|| authentication instanceof AnonymousAuthenticationToken;
|
||||
}
|
||||
|
||||
private void recordAudit(HttpServletRequest request, AuthAuditEventType type, String description) {
|
||||
try {
|
||||
<span class="fc" id="L137"> securityAuditTrailWriter.record(request, type, description);</span>
|
||||
<span class="nc" id="L138"> } catch (RuntimeException auditFailure) {</span>
|
||||
<span class="nc" id="L139"> log.warn("Security audit write failed; continuing with response rendering. type={}",</span>
|
||||
type, auditFailure);
|
||||
<span class="fc" id="L141"> }</span>
|
||||
<span class="fc" id="L142"> }</span>
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TraceIdFilter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.html" class="el_package">com.project.auth.config.web</a> > <span class="el_class">TraceIdFilter</span></div><h1>TraceIdFilter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 61</td><td class="ctr2">93%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">2</td><td class="ctr2">6</td><td class="ctr1">0</td><td class="ctr2">15</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="TraceIdFilter.java.html#L47" class="el_method">nextTraceId()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="65" height="10" title="18" alt="18"/></td><td class="ctr2" id="c3">81%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="TraceIdFilter.java.html#L30" class="el_method">doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="TraceIdFilter.java.html#L16" class="el_method">TraceIdFilter()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="TraceIdFilter.java.html#L23" class="el_method">static {...}</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TraceIdFilter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">bootstrap</a> > <a href="index.source.html" class="el_package">com.project.auth.config.web</a> > <span class="el_source">TraceIdFilter.java</span></div><h1>TraceIdFilter.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
|
||||
|
||||
import com.project.auth.application.support.logging.LogSanitizer;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.slf4j.MDC;
|
||||
import org.slf4j.MDC.MDCCloseable;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HexFormat;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
<span class="fc" id="L16">public class TraceIdFilter extends OncePerRequestFilter {</span>
|
||||
|
||||
private static final String TRACE_ID_KEY = "traceId";
|
||||
private static final String CLIENT_IP_KEY = "clientIp";
|
||||
private static final String USER_AGENT_KEY = "userAgent";
|
||||
private static final String TRACE_ID_HEADER = "X-Trace-Id";
|
||||
private static final String USER_AGENT_HEADER = "User-Agent";
|
||||
<span class="fc" id="L23"> private static final HexFormat HEX_FORMAT = HexFormat.of();</span>
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
FilterChain filterChain) throws ServletException, IOException {
|
||||
<span class="fc" id="L30"> String traceId = nextTraceId();</span>
|
||||
<span class="fc" id="L31"> String clientIp = LogSanitizer.clientIp(request.getRemoteAddr());</span>
|
||||
<span class="fc" id="L32"> String userAgent = LogSanitizer.userAgent(request.getHeader(USER_AGENT_HEADER));</span>
|
||||
<span class="fc" id="L33"> response.setHeader(TRACE_ID_HEADER, traceId);</span>
|
||||
|
||||
try (
|
||||
<span class="fc" id="L36"> MDCCloseable ignoredTraceId = MDC.putCloseable(TRACE_ID_KEY, traceId);</span>
|
||||
<span class="fc" id="L37"> MDCCloseable ignoredClientIp = MDC.putCloseable(CLIENT_IP_KEY, clientIp);</span>
|
||||
<span class="fc" id="L38"> MDCCloseable ignoredUserAgent = MDC.putCloseable(USER_AGENT_KEY, userAgent)) {</span>
|
||||
<span class="fc" id="L39"> filterChain.doFilter(request, response);</span>
|
||||
}
|
||||
<span class="fc" id="L41"> }</span>
|
||||
|
||||
private String nextTraceId() {
|
||||
long highBits;
|
||||
long lowBits;
|
||||
do {
|
||||
<span class="fc" id="L47"> highBits = ThreadLocalRandom.current().nextLong();</span>
|
||||
<span class="fc" id="L48"> lowBits = ThreadLocalRandom.current().nextLong();</span>
|
||||
<span class="pc bpc" id="L49" title="3 of 4 branches missed."> } while (highBits == 0L && lowBits == 0L);</span>
|
||||
|
||||
<span class="fc" id="L51"> return HEX_FORMAT.toHexDigits(highBits) + HEX_FORMAT.toHexDigits(lowBits);</span>
|
||||
}
|
||||
|
||||
}
|
||||
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>bootstrap</title><script type="text/javascript" src="jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><span class="el_report">bootstrap</span></div><h1>bootstrap</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">153 of 1,096</td><td class="ctr2">86%</td><td class="bar">32 of 76</td><td class="ctr2">57%</td><td class="ctr1">29</td><td class="ctr2">102</td><td class="ctr1">35</td><td class="ctr2">266</td><td class="ctr1">3</td><td class="ctr2">62</td><td class="ctr1">0</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a2"><a href="com.project.auth.config.web/index.html" class="el_package">com.project.auth.config.web</a></td><td class="bar" id="b0"><img src="jacoco-resources/redbar.gif" width="19" height="10" title="114" alt="114"/><img src="jacoco-resources/greenbar.gif" width="100" height="10" title="598" alt="598"/></td><td class="ctr2" id="c2">83%</td><td class="bar" id="d0"><img src="jacoco-resources/redbar.gif" width="48" height="10" title="20" alt="20"/><img src="jacoco-resources/greenbar.gif" width="72" height="10" title="30" alt="30"/></td><td class="ctr2" id="e1">60%</td><td class="ctr1" id="f0">19</td><td class="ctr2" id="g0">64</td><td class="ctr1" id="h0">22</td><td class="ctr2" id="i0">169</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">37</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m1">6</td></tr><tr><td id="a0"><a href="com.project.auth.config.auth.security/index.html" class="el_package">com.project.auth.config.auth.security</a></td><td class="bar" id="b1"><img src="jacoco-resources/redbar.gif" width="6" height="10" title="39" alt="39"/><img src="jacoco-resources/greenbar.gif" width="52" height="10" title="309" alt="309"/></td><td class="ctr2" id="c1">88%</td><td class="bar" id="d1"><img src="jacoco-resources/redbar.gif" width="28" height="10" title="12" alt="12"/><img src="jacoco-resources/greenbar.gif" width="28" height="10" title="12" alt="12"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f1">10</td><td class="ctr2" id="g1">34</td><td class="ctr1" id="h1">13</td><td class="ctr2" id="i1">91</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">22</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">7</td></tr><tr><td id="a1"><a href="com.project.auth.config.logging/index.html" class="el_package">com.project.auth.config.logging</a></td><td class="bar" id="b2"><img src="jacoco-resources/greenbar.gif" width="6" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"><img src="jacoco-resources/greenbar.gif" width="4" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">3</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
|
||||
|
After Width: | Height: | Size: 91 B |
|
After Width: | Height: | Size: 91 B |
|
After Width: | Height: | Size: 91 B |
|
After Width: | Height: | Size: 709 B |
|
After Width: | Height: | Size: 586 B |
|
After Width: | Height: | Size: 67 B |
|
After Width: | Height: | Size: 91 B |
|
After Width: | Height: | Size: 351 B |
|
After Width: | Height: | Size: 193 B |
|
After Width: | Height: | Size: 227 B |
@@ -0,0 +1,13 @@
|
||||
/* Pretty printing styles. Used with prettify.js. */
|
||||
|
||||
.str { color: #2A00FF; }
|
||||
.kwd { color: #7F0055; font-weight:bold; }
|
||||
.com { color: #3F5FBF; }
|
||||
.typ { color: #606; }
|
||||
.lit { color: #066; }
|
||||
.pun { color: #660; }
|
||||
.pln { color: #000; }
|
||||
.tag { color: #008; }
|
||||
.atn { color: #606; }
|
||||
.atv { color: #080; }
|
||||
.dec { color: #606; }
|
||||
|
After Width: | Height: | Size: 91 B |
@@ -0,0 +1,243 @@
|
||||
body, td {
|
||||
font-family:sans-serif;
|
||||
font-size:10pt;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-weight:bold;
|
||||
font-size:18pt;
|
||||
}
|
||||
|
||||
.breadcrumb {
|
||||
border:#d6d3ce 1px solid;
|
||||
padding:2px 4px 2px 4px;
|
||||
}
|
||||
|
||||
.breadcrumb .info {
|
||||
float:right;
|
||||
}
|
||||
|
||||
.breadcrumb .info a {
|
||||
margin-left:8px;
|
||||
}
|
||||
|
||||
.el_report {
|
||||
padding-left:18px;
|
||||
background-image:url(report.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_group {
|
||||
padding-left:18px;
|
||||
background-image:url(group.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_bundle {
|
||||
padding-left:18px;
|
||||
background-image:url(bundle.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_package {
|
||||
padding-left:18px;
|
||||
background-image:url(package.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_class {
|
||||
padding-left:18px;
|
||||
background-image:url(class.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_source {
|
||||
padding-left:18px;
|
||||
background-image:url(source.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_method {
|
||||
padding-left:18px;
|
||||
background-image:url(method.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.el_session {
|
||||
padding-left:18px;
|
||||
background-image:url(session.gif);
|
||||
background-position:left center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
pre.source {
|
||||
border:#d6d3ce 1px solid;
|
||||
font-family:monospace;
|
||||
}
|
||||
|
||||
pre.source ol {
|
||||
margin-bottom: 0px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
pre.source li {
|
||||
border-left: 1px solid #D6D3CE;
|
||||
color: #A0A0A0;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
pre.source span.fc {
|
||||
background-color:#ccffcc;
|
||||
}
|
||||
|
||||
pre.source span.nc {
|
||||
background-color:#ffaaaa;
|
||||
}
|
||||
|
||||
pre.source span.pc {
|
||||
background-color:#ffffcc;
|
||||
}
|
||||
|
||||
pre.source span.bfc {
|
||||
background-image: url(branchfc.gif);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 2px center;
|
||||
}
|
||||
|
||||
pre.source span.bfc:hover {
|
||||
background-color:#80ff80;
|
||||
}
|
||||
|
||||
pre.source span.bnc {
|
||||
background-image: url(branchnc.gif);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 2px center;
|
||||
}
|
||||
|
||||
pre.source span.bnc:hover {
|
||||
background-color:#ff8080;
|
||||
}
|
||||
|
||||
pre.source span.bpc {
|
||||
background-image: url(branchpc.gif);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 2px center;
|
||||
}
|
||||
|
||||
pre.source span.bpc:hover {
|
||||
background-color:#ffff80;
|
||||
}
|
||||
|
||||
table.coverage {
|
||||
empty-cells:show;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
|
||||
table.coverage thead {
|
||||
background-color:#e0e0e0;
|
||||
}
|
||||
|
||||
table.coverage thead td {
|
||||
white-space:nowrap;
|
||||
padding:2px 14px 0px 6px;
|
||||
border-bottom:#b0b0b0 1px solid;
|
||||
}
|
||||
|
||||
table.coverage thead td.bar {
|
||||
border-left:#cccccc 1px solid;
|
||||
}
|
||||
|
||||
table.coverage thead td.ctr1 {
|
||||
text-align:right;
|
||||
border-left:#cccccc 1px solid;
|
||||
}
|
||||
|
||||
table.coverage thead td.ctr2 {
|
||||
text-align:right;
|
||||
padding-left:2px;
|
||||
}
|
||||
|
||||
table.coverage thead td.sortable {
|
||||
cursor:pointer;
|
||||
background-image:url(sort.gif);
|
||||
background-position:right center;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
table.coverage thead td.up {
|
||||
background-image:url(up.gif);
|
||||
}
|
||||
|
||||
table.coverage thead td.down {
|
||||
background-image:url(down.gif);
|
||||
}
|
||||
|
||||
table.coverage tbody td {
|
||||
white-space:nowrap;
|
||||
padding:2px 6px 2px 6px;
|
||||
border-bottom:#d6d3ce 1px solid;
|
||||
}
|
||||
|
||||
table.coverage tbody tr:hover {
|
||||
background: #f0f0d0 !important;
|
||||
}
|
||||
|
||||
table.coverage tbody td.bar {
|
||||
border-left:#e8e8e8 1px solid;
|
||||
}
|
||||
|
||||
table.coverage tbody td.ctr1 {
|
||||
text-align:right;
|
||||
padding-right:14px;
|
||||
border-left:#e8e8e8 1px solid;
|
||||
}
|
||||
|
||||
table.coverage tbody td.ctr2 {
|
||||
text-align:right;
|
||||
padding-right:14px;
|
||||
padding-left:2px;
|
||||
}
|
||||
|
||||
table.coverage tfoot td {
|
||||
white-space:nowrap;
|
||||
padding:2px 6px 2px 6px;
|
||||
}
|
||||
|
||||
table.coverage tfoot td.bar {
|
||||
border-left:#e8e8e8 1px solid;
|
||||
}
|
||||
|
||||
table.coverage tfoot td.ctr1 {
|
||||
text-align:right;
|
||||
padding-right:14px;
|
||||
border-left:#e8e8e8 1px solid;
|
||||
}
|
||||
|
||||
table.coverage tfoot td.ctr2 {
|
||||
text-align:right;
|
||||
padding-right:14px;
|
||||
padding-left:2px;
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top:20px;
|
||||
border-top:#d6d3ce 1px solid;
|
||||
padding-top:2px;
|
||||
font-size:8pt;
|
||||
color:#a0a0a0;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color:#a0a0a0;
|
||||
}
|
||||
|
||||
.right {
|
||||
float:right;
|
||||
}
|
||||
|
After Width: | Height: | Size: 363 B |
|
After Width: | Height: | Size: 213 B |
|
After Width: | Height: | Size: 58 B |
@@ -0,0 +1,148 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2009, 2025 Mountainminds GmbH & Co. KG and Contributors
|
||||
* This program and the accompanying materials are made available under
|
||||
* the terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*
|
||||
* Contributors:
|
||||
* Marc R. Hoffmann - initial API and implementation
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
(function () {
|
||||
|
||||
/**
|
||||
* Sets the initial sorting derived from the hash.
|
||||
*
|
||||
* @param linkelementids
|
||||
* list of element ids to search for links to add sort inidcator
|
||||
* hash links
|
||||
*/
|
||||
function initialSort(linkelementids) {
|
||||
window.linkelementids = linkelementids;
|
||||
var hash = window.location.hash;
|
||||
if (hash) {
|
||||
var m = hash.match(/up-./);
|
||||
if (m) {
|
||||
var header = window.document.getElementById(m[0].charAt(3));
|
||||
if (header) {
|
||||
sortColumn(header, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
var m = hash.match(/dn-./);
|
||||
if (m) {
|
||||
var header = window.document.getElementById(m[0].charAt(3));
|
||||
if (header) {
|
||||
sortColumn(header, false);
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts the columns with the given header dependening on the current sort state.
|
||||
*/
|
||||
function toggleSort(header) {
|
||||
var sortup = header.className.indexOf('down ') == 0;
|
||||
sortColumn(header, sortup);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts the columns with the given header in the given direction.
|
||||
*/
|
||||
function sortColumn(header, sortup) {
|
||||
var table = header.parentNode.parentNode.parentNode;
|
||||
var body = table.tBodies[0];
|
||||
var colidx = getNodePosition(header);
|
||||
|
||||
resetSortedStyle(table);
|
||||
|
||||
var rows = body.rows;
|
||||
var sortedrows = [];
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
r = rows[i];
|
||||
sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
|
||||
}
|
||||
|
||||
var hash;
|
||||
|
||||
if (sortup) {
|
||||
for (var i = sortedrows.length - 1; i >= 0; i--) {
|
||||
body.appendChild(sortedrows[i]);
|
||||
}
|
||||
header.className = 'up ' + header.className;
|
||||
hash = 'up-' + header.id;
|
||||
} else {
|
||||
for (var i = 0; i < sortedrows.length; i++) {
|
||||
body.appendChild(sortedrows[i]);
|
||||
}
|
||||
header.className = 'down ' + header.className;
|
||||
hash = 'dn-' + header.id;
|
||||
}
|
||||
|
||||
setHash(hash);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the sort indicator as a hash to the document URL and all links.
|
||||
*/
|
||||
function setHash(hash) {
|
||||
window.document.location.hash = hash;
|
||||
ids = window.linkelementids;
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
setHashOnAllLinks(document.getElementById(ids[i]), hash);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extend all links within the given tag with the given hash.
|
||||
*/
|
||||
function setHashOnAllLinks(tag, hash) {
|
||||
links = tag.getElementsByTagName("a");
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
var a = links[i];
|
||||
var href = a.href;
|
||||
var hashpos = href.indexOf("#");
|
||||
if (hashpos != -1) {
|
||||
href = href.substring(0, hashpos);
|
||||
}
|
||||
a.href = href + "#" + hash;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the position of a element within its parent.
|
||||
*/
|
||||
function getNodePosition(element) {
|
||||
var pos = -1;
|
||||
while (element) {
|
||||
element = element.previousSibling;
|
||||
pos++;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the sorting indicator style from all headers.
|
||||
*/
|
||||
function resetSortedStyle(table) {
|
||||
for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
|
||||
if (c.className) {
|
||||
if (c.className.indexOf('down ') == 0) {
|
||||
c.className = c.className.slice(5);
|
||||
}
|
||||
if (c.className.indexOf('up ') == 0) {
|
||||
c.className = c.className.slice(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window['initialSort'] = initialSort;
|
||||
window['toggleSort'] = toggleSort;
|
||||
|
||||
})();
|
||||
|
After Width: | Height: | Size: 354 B |
|
After Width: | Height: | Size: 67 B |
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - error_endpoint_collapses_5xx_to_common_999_while_preserving_status()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ApiErrorControllerIntegrationTest</a> >
|
||||
<span class="breadcrumb">error_endpoint_collapses_5xx_to_common_999_while_preserving_status()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>error_endpoint_collapses_5xx_to_common_999_while_preserving_status()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.011s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-error_endpoint_collapses_5xx_to_common_999_while_preserving_status()">2026-05-12T15:59:36.369+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:36.370+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:36.371+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:36.373+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.config.web.ApiErrorController#error(HttpServletRequest)
|
||||
2026-05-12T15:59:36.374+09:00 ERROR 3742337 --- [ Test worker] [traceId=] c.p.auth.config.web.ApiErrorController : Unhandled error response. method=GET requestPath=/some/path status=503
|
||||
2026-05-12T15:59:36.375+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:36.375+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-error_endpoint_collapses_5xx_to_common_999_while_preserving_status()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - error_endpoint_falls_back_to_unhandled_client_error_for_unmapped_4xx()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ApiErrorControllerIntegrationTest</a> >
|
||||
<span class="breadcrumb">error_endpoint_falls_back_to_unhandled_client_error_for_unmapped_4xx()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>error_endpoint_falls_back_to_unhandled_client_error_for_unmapped_4xx()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.009s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-error_endpoint_falls_back_to_unhandled_client_error_for_unmapped_4xx()">2026-05-12T15:59:36.431+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:36.431+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:36.432+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:36.434+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.config.web.ApiErrorController#error(HttpServletRequest)
|
||||
2026-05-12T15:59:36.435+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.auth.config.web.ApiErrorController : Unhandled error response. method=GET requestPath=/teapot status=418
|
||||
2026-05-12T15:59:36.435+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:36.435+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-013, message=처리하지 못한 클라이언트 오류입니다., data=null, errors=null, traceI (truncated)...]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-error_endpoint_falls_back_to_unhandled_client_error_for_unmapped_4xx()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - error_endpoint_handles_unknown_status_code_safely()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ApiErrorControllerIntegrationTest</a> >
|
||||
<span class="breadcrumb">error_endpoint_handles_unknown_status_code_safely()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>error_endpoint_handles_unknown_status_code_safely()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.013s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-error_endpoint_handles_unknown_status_code_safely()">2026-05-12T15:59:36.382+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:36.382+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:36.383+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:36.386+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.config.web.ApiErrorController#error(HttpServletRequest)
|
||||
2026-05-12T15:59:36.386+09:00 ERROR 3742337 --- [ Test worker] [traceId=] c.p.auth.config.web.ApiErrorController : Unhandled error response. method=GET requestPath=/some/path status=500
|
||||
2026-05-12T15:59:36.387+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:36.387+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-error_endpoint_handles_unknown_status_code_safely()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - error_endpoint_preserves_404_status_and_classifies_as_resource_not_found()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ApiErrorControllerIntegrationTest</a> >
|
||||
<span class="breadcrumb">error_endpoint_preserves_404_status_and_classifies_as_resource_not_found()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>error_endpoint_preserves_404_status_and_classifies_as_resource_not_found()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.017s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-error_endpoint_preserves_404_status_and_classifies_as_resource_not_found()">2026-05-12T15:59:36.397+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:36.398+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:36.399+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:36.403+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.config.web.ApiErrorController#error(HttpServletRequest)
|
||||
2026-05-12T15:59:36.404+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.auth.config.web.ApiErrorController : Unhandled error response. method=GET requestPath=/some/missing/path status=404
|
||||
2026-05-12T15:59:36.406+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:36.407+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-005, message=요청한 리소스를 찾을 수 없습니다., data=null, errors=null, traceId (truncated)...]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-error_endpoint_preserves_404_status_and_classifies_as_resource_not_found()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - error_endpoint_preserves_405_status_and_classifies_as_method_not_allowed()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ApiErrorControllerIntegrationTest</a> >
|
||||
<span class="breadcrumb">error_endpoint_preserves_405_status_and_classifies_as_method_not_allowed()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>error_endpoint_preserves_405_status_and_classifies_as_method_not_allowed()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.015s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-error_endpoint_preserves_405_status_and_classifies_as_method_not_allowed()">2026-05-12T15:59:36.415+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:36.415+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:36.416+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:36.423+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.config.web.ApiErrorController#error(HttpServletRequest)
|
||||
2026-05-12T15:59:36.423+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.auth.config.web.ApiErrorController : Unhandled error response. method=GET requestPath=/some/path status=405
|
||||
2026-05-12T15:59:36.424+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:36.424+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-003, message=지원하지 않는 HTTP 메서드입니다., data=null, errors=null, traceI (truncated)...]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-error_endpoint_preserves_405_status_and_classifies_as_method_not_allowed()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - error_endpoint_treats_missing_status_attribute_as_500()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ApiErrorControllerIntegrationTest</a> >
|
||||
<span class="breadcrumb">error_endpoint_treats_missing_status_attribute_as_500()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>error_endpoint_treats_missing_status_attribute_as_500()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">error output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.579s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-error_endpoint_treats_missing_status_attribute_as_500()">2026-05-12T15:59:36.143+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:36.143+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:36.145+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:36.197+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6a1a5f293239553d3021d05ea8a47104] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.config.web.ApiErrorController#error(HttpServletRequest)
|
||||
2026-05-12T15:59:36.207+09:00 ERROR 3742337 --- [ Test worker] [traceId=6a1a5f293239553d3021d05ea8a47104] c.p.auth.config.web.ApiErrorController : Unhandled error response. method=GET requestPath=/error status=500
|
||||
2026-05-12T15:59:36.256+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6a1a5f293239553d3021d05ea8a47104] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:36.261+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6a1a5f293239553d3021d05ea8a47104] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-error_endpoint_treats_missing_status_attribute_as_500()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>error output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stderr-error_endpoint_treats_missing_status_attribute_as_500()">Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
|
||||
WARNING: A Java agent has been loaded dynamically (/home/donghyeon/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.17.8/f09415827a71be7ed621c7bd02550678f28bc81c/byte-buddy-agent-1.17.8.jar)
|
||||
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
|
||||
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
|
||||
WARNING: Dynamic loading of agents will be disallowed by default in a future release
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stderr-error_endpoint_treats_missing_status_attribute_as_500()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - com.project.auth.AuthApplicationTests</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">com.project.auth.AuthApplicationTests</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>AuthApplicationTests</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.011s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Skipped</th>
|
||||
<th>Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="success">contextLoads()</td>
|
||||
<td class="path" hidden="">contextLoads()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0.004s</td>
|
||||
<td class="success">100%</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-com.project.auth.AuthApplicationTests">2026-05-12T15:59:36.448+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .b.t.c.SpringBootTestContextBootstrapper : Neither @ContextConfiguration nor @ContextHierarchy found for test class [AuthApplicationTests]: using SpringBootContextLoader
|
||||
2026-05-12T15:59:36.449+09:00 INFO 3742337 --- [ Test worker] [traceId=] t.c.s.AnnotationConfigContextLoaderUtils : Could not detect default configuration classes for test class [com.project.auth.AuthApplicationTests]: AuthApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
|
||||
2026-05-12T15:59:36.449+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .b.t.c.SpringBootTestContextBootstrapper : Using ContextCustomizerFactory implementations for test class [AuthApplicationTests]: [SpringBootTestRandomPortContextCustomizerFactory, OnFailureConditionReportContextCustomizerFactory, OverrideAutoConfigurationContextCustomizerFactory, ImportsContextCustomizerFactory, PropertyMappingContextCustomizerFactory, ExcludeFilterContextCustomizerFactory, TypeExcludeFiltersContextCustomizerFactory, DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory, DuplicateJsonObjectContextCustomizerFactory, BeanOverrideContextCustomizerFactory, MockServerContainerContextCustomizerFactory, DynamicPropertiesContextCustomizerFactory]
|
||||
2026-05-12T15:59:36.450+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .b.t.c.SpringBootTestContextBootstrapper : Using ContextCustomizers for test class [AuthApplicationTests]: [SpringBootTestRandomPortContextCustomizer, OnFailureConditionReportContextCustomizer, PropertyMappingContextCustomizer, ExcludeFilterContextCustomizer, DuplicateJsonObjectContextCustomizer, DynamicPropertiesContextCustomizer]
|
||||
2026-05-12T15:59:36.451+09:00 INFO 3742337 --- [ Test worker] [traceId=] .b.t.c.SpringBootTestContextBootstrapper : Found @SpringBootConfiguration com.project.auth.AuthApplication for test class com.project.auth.AuthApplicationTests
|
||||
2026-05-12T15:59:36.452+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .b.t.c.SpringBootTestContextBootstrapper : Using TestExecutionListeners for test class [AuthApplicationTests]: [ServletTestExecutionListener, DirtiesContextBeforeModesTestExecutionListener, ApplicationEventsTestExecutionListener, BeanOverrideTestExecutionListener, DependencyInjectionTestExecutionListener, DirtiesContextTestExecutionListener, CommonCachesTestExecutionListener, TransactionalTestExecutionListener, SqlScriptsTestExecutionListener, WithSecurityContextTestExecutionListener, EventPublishingTestExecutionListener, ReactorContextTestExecutionListener, MockitoResetTestExecutionListener]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-com.project.auth.AuthApplicationTests">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,119 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - me_auto_registers_internal_user_when_subject_is_not_synchronized()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.AuthenticatedUserResourceServerIntegrationTest</a> >
|
||||
<span class="breadcrumb">me_auto_registers_internal_user_when_subject_is_not_synchronized()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>me_auto_registers_internal_user_when_subject_is_not_synchronized()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.027s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-me_auto_registers_internal_user_when_subject_is_not_synchronized()">2026-05-12T15:59:41.889+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0
|
||||
2026-05-12T15:59:41.891+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:41.891+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:41.892+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:41.895+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.presentation.auth.controller.AuthenticatedUserController#me(AuthenticatedUser)
|
||||
2026-05-12T15:59:41.896+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.provider=? and uje1_0.provider_subject=?
|
||||
2026-05-12T15:59:41.898+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id from auth.users uje1_0 where uje1_0.email=? fetch first ? rows only
|
||||
2026-05-12T15:59:41.900+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
|
||||
2026-05-12T15:59:41.903+09:00 INFO 3742337 --- [ Test worker] [traceId=] audit.auth : KEYCLOAK_USER_AUTO_REGISTERED eventType="KEYCLOAK_USER_AUTO_REGISTERED" provider="KEYCLOAK" subject="keycloak-subject-1"
|
||||
2026-05-12T15:59:41.904+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
|
||||
2026-05-12T15:59:41.906+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:41.906+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] m.m.a.RequestResponseBodyMethodProcessor : Writing [ApiResult[success=true, code=AUTHENTICATED_USER_LOADED, message=현재 사용자 조회가 완료되었습니다., data=Authentica (truncated)...]
|
||||
2026-05-12T15:59:41.909+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select count(*) from auth.users uje1_0
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-me_auto_registers_internal_user_when_subject_is_not_synchronized()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,120 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - me_returns_401_when_no_authentication()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.AuthenticatedUserResourceServerIntegrationTest</a> >
|
||||
<span class="breadcrumb">me_returns_401_when_no_authentication()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>me_returns_401_when_no_authentication()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.020s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-me_returns_401_when_no_authentication()">2026-05-12T15:59:41.868+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0
|
||||
2026-05-12T15:59:41.870+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : delete from auth.users where id=?
|
||||
2026-05-12T15:59:41.871+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:41.871+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:41.872+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:41.878+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.a.c.a.s.SecurityAuditTrailWriter : Authentication required. actorId=anonymous method=GET requestPath=/api/v1/auth/me
|
||||
2026-05-12T15:59:41.878+09:00 WARN 3742337 --- [ Test worker] [traceId=] audit.auth : AUTHENTICATION_REQUIRED eventType="AUTHENTICATION_REQUIRED" actorId="anonymous" method="GET" requestPath="/api/v1/auth/me"
|
||||
2026-05-12T15:59:41.879+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.SecurityResponseExceptionHandler#handleAuthenticationException(AuthenticationException, HttpServletRequest)
|
||||
2026-05-12T15:59:41.879+09:00 WARN 3742337 --- [ Test worker] [traceId=] p.a.c.w.SecurityResponseExceptionHandler : Authentication required. exceptionType=InsufficientAuthenticationException method=GET requestPath=/api/v1/auth/me errorCode=AUTH-001
|
||||
2026-05-12T15:59:41.879+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.a.c.a.s.SecurityAuditTrailWriter : Authentication required. actorId=anonymous method=GET requestPath=/api/v1/auth/me
|
||||
2026-05-12T15:59:41.879+09:00 WARN 3742337 --- [ Test worker] [traceId=] audit.auth : AUTHENTICATION_REQUIRED eventType="AUTHENTICATION_REQUIRED" actorId="anonymous" method="GET" requestPath="/api/v1/auth/me"
|
||||
2026-05-12T15:59:41.880+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:41.880+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-001, message=인증이 필요합니다., data=null, errors=null, traceId=-, times (truncated)...]
|
||||
2026-05-12T15:59:41.880+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-me_returns_401_when_no_authentication()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,119 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - me_returns_403_when_token_has_no_user_realm_role()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.AuthenticatedUserResourceServerIntegrationTest</a> >
|
||||
<span class="breadcrumb">me_returns_403_when_token_has_no_user_realm_role()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>me_returns_403_when_token_has_no_user_realm_role()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.288s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-me_returns_403_when_token_has_no_user_realm_role()">2026-05-12T15:59:41.103+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0
|
||||
2026-05-12T15:59:41.134+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:41.135+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:41.136+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:41.148+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.a.c.a.s.SecurityAuditTrailWriter : Access denied. actorId=sha256:8013ed33ef1dd6f2 method=GET requestPath=/api/v1/auth/me
|
||||
2026-05-12T15:59:41.150+09:00 WARN 3742337 --- [ Test worker] [traceId=] audit.auth : ACCESS_DENIED eventType="ACCESS_DENIED" actorId="sha256:8013ed33ef1dd6f2" method="GET" requestPath="/api/v1/auth/me"
|
||||
2026-05-12T15:59:41.151+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.SecurityResponseExceptionHandler#handleAccessDeniedException(AccessDeniedException, HttpServletRequest)
|
||||
2026-05-12T15:59:41.151+09:00 WARN 3742337 --- [ Test worker] [traceId=] p.a.c.w.SecurityResponseExceptionHandler : Access denied for authenticated principal. exceptionType=AuthorizationDeniedException method=GET requestPath=/api/v1/auth/me errorCode=AUTH-002
|
||||
2026-05-12T15:59:41.152+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.a.c.a.s.SecurityAuditTrailWriter : Access denied. actorId=sha256:8013ed33ef1dd6f2 method=GET requestPath=/api/v1/auth/me
|
||||
2026-05-12T15:59:41.152+09:00 WARN 3742337 --- [ Test worker] [traceId=] audit.auth : ACCESS_DENIED eventType="ACCESS_DENIED" actorId="sha256:8013ed33ef1dd6f2" method="GET" requestPath="/api/v1/auth/me"
|
||||
2026-05-12T15:59:41.159+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:41.160+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-002, message=접근 권한이 없습니다., data=null, errors=null, traceId=-, tim (truncated)...]
|
||||
2026-05-12T15:59:41.162+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.authorization.AuthorizationDeniedException: Access Denied]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-me_returns_403_when_token_has_no_user_realm_role()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,121 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - me_returns_409_when_subject_is_not_found_but_same_email_exists()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.AuthenticatedUserResourceServerIntegrationTest</a> >
|
||||
<span class="breadcrumb">me_returns_409_when_subject_is_not_found_but_same_email_exists()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>me_returns_409_when_subject_is_not_found_but_same_email_exists()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.642s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-me_returns_409_when_subject_is_not_found_but_same_email_exists()">2026-05-12T15:59:41.170+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0
|
||||
2026-05-12T15:59:41.172+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:41.172+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:41.173+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:41.190+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
|
||||
2026-05-12T15:59:41.230+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
|
||||
2026-05-12T15:59:41.240+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.presentation.auth.controller.AuthenticatedUserController#me(AuthenticatedUser)
|
||||
2026-05-12T15:59:41.631+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.provider=? and uje1_0.provider_subject=?
|
||||
2026-05-12T15:59:41.647+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id from auth.users uje1_0 where uje1_0.email=? fetch first ? rows only
|
||||
2026-05-12T15:59:41.658+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ApplicationExceptionHandler#handleBusinessException(BusinessException, HttpServletRequest)
|
||||
2026-05-12T15:59:41.658+09:00 WARN 3742337 --- [ Test worker] [traceId=] c.p.a.p.s.e.ApplicationExceptionHandler : Business exception. exceptionType=KeycloakAccountConflictException errorCode=AUTH-005 method=GET requestPath=/api/v1/auth/me
|
||||
2026-05-12T15:59:41.659+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:41.660+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-005, message=Keycloak 계정과 연결할 수 없는 내부 사용자 정보입니다., data=null, erro (truncated)...]
|
||||
2026-05-12T15:59:41.661+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.project.auth.application.auth.exception.KeycloakAccountConflictException: Keycloak 계정과 연결할 수 없는 내부 사용자 정보입니다.]
|
||||
2026-05-12T15:59:41.691+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select count(*) from auth.users uje1_0
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-me_returns_409_when_subject_is_not_found_but_same_email_exists()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - me_reuses_existing_internal_user_when_subject_already_synchronized()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.AuthenticatedUserResourceServerIntegrationTest</a> >
|
||||
<span class="breadcrumb">me_reuses_existing_internal_user_when_subject_already_synchronized()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>me_reuses_existing_internal_user_when_subject_already_synchronized()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.053s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-me_reuses_existing_internal_user_when_subject_already_synchronized()">2026-05-12T15:59:41.814+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0
|
||||
2026-05-12T15:59:41.826+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : delete from auth.users where id=?
|
||||
2026-05-12T15:59:41.829+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:41.829+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:41.830+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:41.832+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
|
||||
2026-05-12T15:59:41.833+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
|
||||
2026-05-12T15:59:41.837+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.presentation.auth.controller.AuthenticatedUserController#me(AuthenticatedUser)
|
||||
2026-05-12T15:59:41.839+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.provider=? and uje1_0.provider_subject=?
|
||||
2026-05-12T15:59:41.844+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:41.847+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] m.m.a.RequestResponseBodyMethodProcessor : Writing [ApiResult[success=true, code=AUTHENTICATED_USER_LOADED, message=현재 사용자 조회가 완료되었습니다., data=Authentica (truncated)...]
|
||||
2026-05-12T15:59:41.860+09:00 DEBUG 3742337 --- [ Test worker] [traceId=] org.hibernate.SQL : select count(*) from auth.users uje1_0
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-me_reuses_existing_internal_user_when_subject_already_synchronized()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - access_denied_for_anonymous_user_maps_to_401_authentication_required()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">access_denied_for_anonymous_user_maps_to_401_authentication_required()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>access_denied_for_anonymous_user_maps_to_401_authentication_required()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.012s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-access_denied_for_anonymous_user_maps_to_401_authentication_required()">2026-05-12T15:59:43.085+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.085+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.087+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:43.090+09:00 WARN 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] c.p.a.c.a.s.SecurityAuditTrailWriter : Authentication required. actorId=anonymous method=GET requestPath=/test-support/access-denied
|
||||
2026-05-12T15:59:43.090+09:00 WARN 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] audit.auth : AUTHENTICATION_REQUIRED eventType="AUTHENTICATION_REQUIRED" actorId="anonymous" method="GET" requestPath="/test-support/access-denied"
|
||||
2026-05-12T15:59:43.091+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.SecurityResponseExceptionHandler#handleAuthenticationException(AuthenticationException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.091+09:00 WARN 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] p.a.c.w.SecurityResponseExceptionHandler : Authentication required. exceptionType=InsufficientAuthenticationException method=GET requestPath=/test-support/access-denied errorCode=AUTH-001
|
||||
2026-05-12T15:59:43.091+09:00 WARN 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] c.p.a.c.a.s.SecurityAuditTrailWriter : Authentication required. actorId=anonymous method=GET requestPath=/test-support/access-denied
|
||||
2026-05-12T15:59:43.091+09:00 WARN 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] audit.auth : AUTHENTICATION_REQUIRED eventType="AUTHENTICATION_REQUIRED" actorId="anonymous" method="GET" requestPath="/test-support/access-denied"
|
||||
2026-05-12T15:59:43.091+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.092+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-001, message=인증이 필요합니다., data=null, errors=null, traceId=5b5404b7 (truncated)...]
|
||||
2026-05-12T15:59:43.092+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5b5404b7b9f83f61d35bac4cceefdbe3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-access_denied_for_anonymous_user_maps_to_401_authentication_required()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,117 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - access_denied_for_authenticated_user_remains_403_forbidden()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">access_denied_for_authenticated_user_remains_403_forbidden()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>access_denied_for_authenticated_user_remains_403_forbidden()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.010s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-access_denied_for_authenticated_user_remains_403_forbidden()">2026-05-12T15:59:43.060+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.060+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.061+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.064+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#accessDenied()
|
||||
2026-05-12T15:59:43.064+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.SecurityResponseExceptionHandler#handleAccessDeniedException(AccessDeniedException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.064+09:00 WARN 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] p.a.c.w.SecurityResponseExceptionHandler : Access denied for authenticated principal. exceptionType=AccessDeniedException method=GET requestPath=/test-support/access-denied errorCode=AUTH-002
|
||||
2026-05-12T15:59:43.064+09:00 WARN 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] c.p.a.c.a.s.SecurityAuditTrailWriter : Access denied. actorId=us***@example.com method=GET requestPath=/test-support/access-denied
|
||||
2026-05-12T15:59:43.065+09:00 WARN 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] audit.auth : ACCESS_DENIED eventType="ACCESS_DENIED" actorId="us***@example.com" method="GET" requestPath="/test-support/access-denied"
|
||||
2026-05-12T15:59:43.065+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.065+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-002, message=접근 권한이 없습니다., data=null, errors=null, traceId=6c5f72 (truncated)...]
|
||||
2026-05-12T15:59:43.066+09:00 DEBUG 3742337 --- [ Test worker] [traceId=6c5f72b1b521a32743f6702a1baa3900] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.access.AccessDeniedException: simulated denial]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-access_denied_for_authenticated_user_remains_403_forbidden()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,117 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - authenticated_user_without_required_role_returns_403_json_without_exposing_principal(CapturedOutput)</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">authenticated_user_without_required_role_returns_403_json_without_exposing_principal(CapturedOutput)</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>authenticated_user_without_required_role_returns_403_json_without_exposing_principal(CapturedOutput)</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.055s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-authenticated_user_without_required_role_returns_403_json_without_exposing_principal(CapturedOutput)">2026-05-12T15:59:42.810+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:42.810+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:42.811+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:42.820+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#adminOnly()
|
||||
2026-05-12T15:59:42.821+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.SecurityResponseExceptionHandler#handleAccessDeniedException(AccessDeniedException, HttpServletRequest)
|
||||
2026-05-12T15:59:42.821+09:00 WARN 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] p.a.c.w.SecurityResponseExceptionHandler : Access denied for authenticated principal. exceptionType=AuthorizationDeniedException method=GET requestPath=/test-support/admin errorCode=AUTH-002
|
||||
2026-05-12T15:59:42.822+09:00 WARN 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] c.p.a.c.a.s.SecurityAuditTrailWriter : Access denied. actorId=al***@example.com method=GET requestPath=/test-support/admin
|
||||
2026-05-12T15:59:42.822+09:00 WARN 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] audit.auth : ACCESS_DENIED eventType="ACCESS_DENIED" actorId="al***@example.com" method="GET" requestPath="/test-support/admin"
|
||||
2026-05-12T15:59:42.825+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:42.825+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-002, message=접근 권한이 없습니다., data=null, errors=null, traceId=c756b6 (truncated)...]
|
||||
2026-05-12T15:59:42.828+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c756b63ddb4adb1315050979b2ef7847] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.authorization.AuthorizationDeniedException: Access Denied]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-authenticated_user_without_required_role_returns_403_json_without_exposing_principal(CapturedOutput)">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - business_exception_returns_mapped_status_and_code()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">business_exception_returns_mapped_status_and_code()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>business_exception_returns_mapped_status_and_code()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.011s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-business_exception_returns_mapped_status_and_code()">2026-05-12T15:59:43.034+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.034+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.036+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:43.038+09:00 DEBUG 3742337 --- [ Test worker] [traceId=828baca1257557da8a5490f029079c98] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#businessException()
|
||||
2026-05-12T15:59:43.039+09:00 DEBUG 3742337 --- [ Test worker] [traceId=828baca1257557da8a5490f029079c98] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ApplicationExceptionHandler#handleBusinessException(BusinessException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.039+09:00 WARN 3742337 --- [ Test worker] [traceId=828baca1257557da8a5490f029079c98] c.p.a.p.s.e.ApplicationExceptionHandler : Business exception. exceptionType=KeycloakUserNotFoundException errorCode=AUTH-004 method=GET requestPath=/test-support/business
|
||||
2026-05-12T15:59:43.040+09:00 DEBUG 3742337 --- [ Test worker] [traceId=828baca1257557da8a5490f029079c98] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.040+09:00 DEBUG 3742337 --- [ Test worker] [traceId=828baca1257557da8a5490f029079c98] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-004, message=연결된 내부 Keycloak 사용자를 찾을 수 없습니다., data=null, errors=n (truncated)...]
|
||||
2026-05-12T15:59:43.041+09:00 DEBUG 3742337 --- [ Test worker] [traceId=828baca1257557da8a5490f029079c98] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.project.auth.application.auth.exception.KeycloakUserNotFoundException: 연결된 내부 Keycloak 사용자를 찾을 수 없습니다.]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-business_exception_returns_mapped_status_and_code()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - client_supplied_trace_id_is_ignored_and_server_generated_value_is_returned()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">client_supplied_trace_id_is_ignored_and_server_generated_value_is_returned()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>client_supplied_trace_id_is_ignored_and_server_generated_value_is_returned()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.014s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-client_supplied_trace_id_is_ignored_and_server_generated_value_is_returned()">2026-05-12T15:59:43.158+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.158+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.160+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:43.162+09:00 DEBUG 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#bodyEndpoint(Map)
|
||||
2026-05-12T15:59:43.164+09:00 DEBUG 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.bodyEndpoint(java.util.Map<java.lang.String, java.lang.Object>): JSON parse error: Unexpected character ('i' (code 105)): was expecting double-quote to start property name
|
||||
2026-05-12T15:59:43.165+09:00 DEBUG 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMessageNotReadableException(HttpMessageNotReadableException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.165+09:00 WARN 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] c.p.a.p.s.e.RequestExceptionHandler : Request body not readable. method=POST requestPath=/test-support/body errorCode=PRES-002
|
||||
2026-05-12T15:59:43.165+09:00 DEBUG 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.166+09:00 DEBUG 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-002, message=요청 본문을 읽을 수 없습니다., data=null, errors=null, traceId=5 (truncated)...]
|
||||
2026-05-12T15:59:43.166+09:00 DEBUG 3742337 --- [ Test worker] [traceId=52ea64526950a822b30e95b03e771942] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('i' (code 105)): was expecting double-quote to start property name]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-client_supplied_trace_id_is_ignored_and_server_generated_value_is_returned()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - framework_thrown_4xx_status_preserves_status_and_maps_to_unhandled_client_error()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">framework_thrown_4xx_status_preserves_status_and_maps_to_unhandled_client_error()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>framework_thrown_4xx_status_preserves_status_and_maps_to_unhandled_client_error()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.013s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-framework_thrown_4xx_status_preserves_status_and_maps_to_unhandled_client_error()">2026-05-12T15:59:43.128+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.128+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.129+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.132+09:00 DEBUG 3742337 --- [ Test worker] [traceId=53b4a7472e2fad0cd2b36ad0084b6cd6] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#frameworkThrown4xx()
|
||||
2026-05-12T15:59:43.133+09:00 DEBUG 3742337 --- [ Test worker] [traceId=53b4a7472e2fad0cd2b36ad0084b6cd6] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleErrorResponseException(ErrorResponse, HttpServletRequest)
|
||||
2026-05-12T15:59:43.134+09:00 WARN 3742337 --- [ Test worker] [traceId=53b4a7472e2fad0cd2b36ad0084b6cd6] c.p.a.p.s.e.RequestExceptionHandler : Framework-thrown 4xx status. method=GET requestPath=/test-support/conflict status=409 errorCode=PRES-013
|
||||
2026-05-12T15:59:43.134+09:00 DEBUG 3742337 --- [ Test worker] [traceId=53b4a7472e2fad0cd2b36ad0084b6cd6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.134+09:00 DEBUG 3742337 --- [ Test worker] [traceId=53b4a7472e2fad0cd2b36ad0084b6cd6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-013, message=처리하지 못한 클라이언트 오류입니다., data=null, errors=null, traceI (truncated)...]
|
||||
2026-05-12T15:59:43.135+09:00 DEBUG 3742337 --- [ Test worker] [traceId=53b4a7472e2fad0cd2b36ad0084b6cd6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.server.ResponseStatusException: 409 CONFLICT]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-framework_thrown_4xx_status_preserves_status_and_maps_to_unhandled_client_error()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,311 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - framework_thrown_5xx_status_preserves_status_and_collapses_to_common_999()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">framework_thrown_5xx_status_preserves_status_and_collapses_to_common_999()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>framework_thrown_5xx_status_preserves_status_and_collapses_to_common_999()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.012s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-framework_thrown_5xx_status_preserves_status_and_collapses_to_common_999()">2026-05-12T15:59:43.229+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.229+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.231+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:43.233+09:00 DEBUG 3742337 --- [ Test worker] [traceId=a26d1f3fcc5125d013d9b404262f77af] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#frameworkThrown5xx()
|
||||
2026-05-12T15:59:43.234+09:00 DEBUG 3742337 --- [ Test worker] [traceId=a26d1f3fcc5125d013d9b404262f77af] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleErrorResponseException(ErrorResponse, HttpServletRequest)
|
||||
2026-05-12T15:59:43.234+09:00 ERROR 3742337 --- [ Test worker] [traceId=a26d1f3fcc5125d013d9b404262f77af] c.p.a.p.s.e.RequestExceptionHandler : Framework-thrown 5xx status. method=GET requestPath=/test-support/service-unavailable status=503
|
||||
|
||||
org.springframework.web.server.ResponseStatusException: 503 SERVICE_UNAVAILABLE
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.frameworkThrown5xx(ExceptionHandlingIntegrationTest.java:340)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:184)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
|
||||
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
|
||||
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:160)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:235)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:493)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:354)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:86)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:132)
|
||||
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:181)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AuthenticationFilter.doFilterInternal(AuthenticationFilter.java:194)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter.doFilterInternal(BearerTokenAuthenticationFilter.java:174)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.OAuth2ProtectedResourceMetadataFilter.doFilterInternal(OAuth2ProtectedResourceMetadataFilter.java:97)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:96)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:337)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:237)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:195)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.ServletRequestPathFilter.doFilter(ServletRequestPathFilter.java:52)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebSecurityConfiguration.java:317)
|
||||
at org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurer$DelegateFilter.doFilter(SecurityMockMvcConfigurer.java:135)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at com.project.auth.config.web.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199)
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest.framework_thrown_5xx_status_preserves_status_and_collapses_to_common_999(ExceptionHandlingIntegrationTest.java:189)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
|
||||
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
|
||||
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
|
||||
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:93)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$0(InterceptingLauncher.java:41)
|
||||
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:40)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.processAllTestClasses(JUnitPlatformTestDefinitionProcessor.java:172)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.access$000(JUnitPlatformTestDefinitionProcessor.java:121)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor.stop(JUnitPlatformTestDefinitionProcessor.java:114)
|
||||
at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.stop(SuiteTestDefinitionProcessor.java:64)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
|
||||
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
|
||||
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
|
||||
at jdk.proxy2/jdk.proxy2.$Proxy6.stop(Unknown Source)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:195)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
|
||||
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
|
||||
|
||||
2026-05-12T15:59:43.235+09:00 DEBUG 3742337 --- [ Test worker] [traceId=a26d1f3fcc5125d013d9b404262f77af] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.236+09:00 DEBUG 3742337 --- [ Test worker] [traceId=a26d1f3fcc5125d013d9b404262f77af] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
2026-05-12T15:59:43.236+09:00 DEBUG 3742337 --- [ Test worker] [traceId=a26d1f3fcc5125d013d9b404262f77af] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.server.ResponseStatusException: 503 SERVICE_UNAVAILABLE]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-framework_thrown_5xx_status_preserves_status_and_collapses_to_common_999()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,311 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - infrastructure_exception_returns_common_999_and_logs_internal_code(CapturedOutput)</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">infrastructure_exception_returns_common_999_and_logs_internal_code(CapturedOutput)</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>infrastructure_exception_returns_common_999_and_logs_internal_code(CapturedOutput)</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.013s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-infrastructure_exception_returns_common_999_and_logs_internal_code(CapturedOutput)">2026-05-12T15:59:43.201+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.201+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.202+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.205+09:00 DEBUG 3742337 --- [ Test worker] [traceId=633326e404009728574ad388f8368ac2] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#infrastructureFailure()
|
||||
2026-05-12T15:59:43.206+09:00 DEBUG 3742337 --- [ Test worker] [traceId=633326e404009728574ad388f8368ac2] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.InfrastructureExceptionHandler#handleInfrastructureException(InfrastructureException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.207+09:00 ERROR 3742337 --- [ Test worker] [traceId=633326e404009728574ad388f8368ac2] c.p.a.c.w.InfrastructureExceptionHandler : Infrastructure failure. errorCode=INFRA-999 method=GET requestPath=/test-support/infrastructure
|
||||
|
||||
com.project.auth.infrastructure.support.exception.InfrastructureException: Simulated external outage for integration test.
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.infrastructureFailure(ExceptionHandlingIntegrationTest.java:315)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:184)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
|
||||
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
|
||||
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:160)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:235)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:493)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:354)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:86)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:132)
|
||||
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:181)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AuthenticationFilter.doFilterInternal(AuthenticationFilter.java:194)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter.doFilterInternal(BearerTokenAuthenticationFilter.java:174)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.OAuth2ProtectedResourceMetadataFilter.doFilterInternal(OAuth2ProtectedResourceMetadataFilter.java:97)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:96)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:337)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:237)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:195)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.ServletRequestPathFilter.doFilter(ServletRequestPathFilter.java:52)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebSecurityConfiguration.java:317)
|
||||
at org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurer$DelegateFilter.doFilter(SecurityMockMvcConfigurer.java:135)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at com.project.auth.config.web.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199)
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest.infrastructure_exception_returns_common_999_and_logs_internal_code(ExceptionHandlingIntegrationTest.java:148)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
|
||||
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
|
||||
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
|
||||
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:93)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$0(InterceptingLauncher.java:41)
|
||||
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:40)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.processAllTestClasses(JUnitPlatformTestDefinitionProcessor.java:172)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.access$000(JUnitPlatformTestDefinitionProcessor.java:121)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor.stop(JUnitPlatformTestDefinitionProcessor.java:114)
|
||||
at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.stop(SuiteTestDefinitionProcessor.java:64)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
|
||||
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
|
||||
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
|
||||
at jdk.proxy2/jdk.proxy2.$Proxy6.stop(Unknown Source)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:195)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
|
||||
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
|
||||
|
||||
2026-05-12T15:59:43.208+09:00 DEBUG 3742337 --- [ Test worker] [traceId=633326e404009728574ad388f8368ac2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.208+09:00 DEBUG 3742337 --- [ Test worker] [traceId=633326e404009728574ad388f8368ac2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
2026-05-12T15:59:43.209+09:00 DEBUG 3742337 --- [ Test worker] [traceId=633326e404009728574ad388f8368ac2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.project.auth.infrastructure.support.exception.InfrastructureException: Simulated external outage for integration test.]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-infrastructure_exception_returns_common_999_and_logs_internal_code(CapturedOutput)">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,311 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - leaked_domain_exception_falls_back_to_common_999_without_exposing_message()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">leaked_domain_exception_falls_back_to_common_999_without_exposing_message()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>leaked_domain_exception_falls_back_to_common_999_without_exposing_message()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.016s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-leaked_domain_exception_falls_back_to_common_999_without_exposing_message()">2026-05-12T15:59:43.173+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.173+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.175+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.177+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c6b6d1bb68a2d2e52348b43dc40df79f] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#domainFailure()
|
||||
2026-05-12T15:59:43.178+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c6b6d1bb68a2d2e52348b43dc40df79f] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.InfrastructureExceptionHandler#handleLeakedDomainException(DomainException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.178+09:00 ERROR 3742337 --- [ Test worker] [traceId=c6b6d1bb68a2d2e52348b43dc40df79f] c.p.a.c.w.InfrastructureExceptionHandler : Leaked domain exception. method=GET requestPath=/test-support/domain
|
||||
|
||||
com.project.auth.ExceptionHandlingIntegrationTest$TestDomainException: 테스트용 사용자 노출 메시지
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.domainFailure(ExceptionHandlingIntegrationTest.java:323)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:184)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
|
||||
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
|
||||
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:160)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:235)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:493)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:354)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:86)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:132)
|
||||
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:181)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AuthenticationFilter.doFilterInternal(AuthenticationFilter.java:194)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter.doFilterInternal(BearerTokenAuthenticationFilter.java:174)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.OAuth2ProtectedResourceMetadataFilter.doFilterInternal(OAuth2ProtectedResourceMetadataFilter.java:97)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:96)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:337)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:237)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:195)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.ServletRequestPathFilter.doFilter(ServletRequestPathFilter.java:52)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebSecurityConfiguration.java:317)
|
||||
at org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurer$DelegateFilter.doFilter(SecurityMockMvcConfigurer.java:135)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at com.project.auth.config.web.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199)
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest.leaked_domain_exception_falls_back_to_common_999_without_exposing_message(ExceptionHandlingIntegrationTest.java:275)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
|
||||
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
|
||||
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
|
||||
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:93)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$0(InterceptingLauncher.java:41)
|
||||
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:40)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.processAllTestClasses(JUnitPlatformTestDefinitionProcessor.java:172)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.access$000(JUnitPlatformTestDefinitionProcessor.java:121)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor.stop(JUnitPlatformTestDefinitionProcessor.java:114)
|
||||
at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.stop(SuiteTestDefinitionProcessor.java:64)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
|
||||
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
|
||||
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
|
||||
at jdk.proxy2/jdk.proxy2.$Proxy6.stop(Unknown Source)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:195)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
|
||||
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
|
||||
|
||||
2026-05-12T15:59:43.183+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c6b6d1bb68a2d2e52348b43dc40df79f] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.183+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c6b6d1bb68a2d2e52348b43dc40df79f] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
2026-05-12T15:59:43.184+09:00 DEBUG 3742337 --- [ Test worker] [traceId=c6b6d1bb68a2d2e52348b43dc40df79f] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.project.auth.ExceptionHandlingIntegrationTest$TestDomainException: 테스트용 사용자 노출 메시지]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-leaked_domain_exception_falls_back_to_common_999_without_exposing_message()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - malformed_json_returns_400_json()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">malformed_json_returns_400_json()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>malformed_json_returns_400_json()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.013s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-malformed_json_returns_400_json()">2026-05-12T15:59:43.215+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.215+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.217+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:43.220+09:00 DEBUG 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#bodyEndpoint(Map)
|
||||
2026-05-12T15:59:43.221+09:00 DEBUG 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.bodyEndpoint(java.util.Map<java.lang.String, java.lang.Object>): JSON parse error: Unexpected character ('i' (code 105)): was expecting double-quote to start property name
|
||||
2026-05-12T15:59:43.221+09:00 DEBUG 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMessageNotReadableException(HttpMessageNotReadableException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.221+09:00 WARN 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] c.p.a.p.s.e.RequestExceptionHandler : Request body not readable. method=POST requestPath=/test-support/body errorCode=PRES-002
|
||||
2026-05-12T15:59:43.221+09:00 DEBUG 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.222+09:00 DEBUG 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-002, message=요청 본문을 읽을 수 없습니다., data=null, errors=null, traceId=d (truncated)...]
|
||||
2026-05-12T15:59:43.222+09:00 DEBUG 3742337 --- [ Test worker] [traceId=d7a73beebf9319316d2f2386bf85a9f4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('i' (code 105)): was expecting double-quote to start property name]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-malformed_json_returns_400_json()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - method_argument_not_valid_returns_400_with_invalid_input_and_field_errors()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">method_argument_not_valid_returns_400_with_invalid_input_and_field_errors()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>method_argument_not_valid_returns_400_with_invalid_input_and_field_errors()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.096s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-method_argument_not_valid_returns_400_with_invalid_input_and_field_errors()">2026-05-12T15:59:42.918+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:42.918+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:42.919+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:42.922+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#validatedBody(ValidatedRequest)
|
||||
2026-05-12T15:59:42.981+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json" to [ValidatedRequest[name=]]
|
||||
2026-05-12T15:59:42.996+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ValidationExceptionHandler#handleValidationException(MethodArgumentNotValidException)
|
||||
2026-05-12T15:59:42.996+09:00 WARN 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] c.p.a.p.s.e.ValidationExceptionHandler : Validation failed: {/name=[이름은 필수입니다]}
|
||||
2026-05-12T15:59:42.997+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:42.997+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-001, message=요청 값이 올바르지 않습니다., data=null, errors={/name=[이름은 필수입니 (truncated)...]
|
||||
2026-05-12T15:59:43.005+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0978ce8adaac9d32afd4e6dfab2a25f6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.validatedBody(com.project.auth.ExceptionHandlingIntegrationTest$ValidatedRequest): [Field error in object 'validatedRequest' on field 'name': rejected value []; codes [NotBlank.validatedRequest.name,NotBlank.name,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [validatedRequest.name,name]; arguments []; default message [name]]; default message [이름은 필수입니다]] ]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-method_argument_not_valid_returns_400_with_invalid_input_and_field_errors()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - missing_required_header_returns_header_specific_error_code()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">missing_required_header_returns_header_specific_error_code()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>missing_required_header_returns_header_specific_error_code()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.012s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-missing_required_header_returns_header_specific_error_code()">2026-05-12T15:59:43.047+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.047+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.048+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.051+09:00 DEBUG 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#headerRequired(String)
|
||||
2026-05-12T15:59:43.052+09:00 DEBUG 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.headerRequired(java.lang.String): Required request header 'X-Test-Header' for method parameter type String is not present
|
||||
2026-05-12T15:59:43.052+09:00 DEBUG 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMissingRequestHeaderException(MissingRequestHeaderException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.053+09:00 WARN 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] c.p.a.p.s.e.RequestExceptionHandler : Missing request header. method=GET requestPath=/test-support/header-required header=X-Test-Header errorCode=PRES-009
|
||||
2026-05-12T15:59:43.053+09:00 DEBUG 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.053+09:00 DEBUG 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-009, message=필수 요청 헤더가 누락되었습니다., data=null, errors=null, traceId= (truncated)...]
|
||||
2026-05-12T15:59:43.054+09:00 DEBUG 3742337 --- [ Test worker] [traceId=038a858a6c4daeb5c94e9ca373497127] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-Test-Header' for method parameter type String is not present]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-missing_required_header_returns_header_specific_error_code()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - missing_required_query_parameter_returns_400_with_missing_parameter_code()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">missing_required_query_parameter_returns_400_with_missing_parameter_code()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>missing_required_query_parameter_returns_400_with_missing_parameter_code()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.010s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-missing_required_query_parameter_returns_400_with_missing_parameter_code()">2026-05-12T15:59:43.189+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.190+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.191+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.193+09:00 DEBUG 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#requiredParam(String)
|
||||
2026-05-12T15:59:43.194+09:00 DEBUG 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.requiredParam(java.lang.String): Required request parameter 'name' for method parameter type String is not present
|
||||
2026-05-12T15:59:43.195+09:00 DEBUG 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMissingParameterException(MissingServletRequestParameterException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.195+09:00 WARN 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] c.p.a.p.s.e.RequestExceptionHandler : Missing request parameter. method=GET requestPath=/test-support/required-param parameter=name errorCode=PRES-004
|
||||
2026-05-12T15:59:43.196+09:00 DEBUG 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.196+09:00 DEBUG 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-004, message=필수 요청 파라미터가 누락되었습니다., data=null, errors=null, traceI (truncated)...]
|
||||
2026-05-12T15:59:43.196+09:00 DEBUG 3742337 --- [ Test worker] [traceId=f88d858cb08031d1d1401f2405da7ff0] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-missing_required_query_parameter_returns_400_with_missing_parameter_code()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - type_mismatch_in_query_parameter_returns_400_with_type_mismatch_code()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">type_mismatch_in_query_parameter_returns_400_with_type_mismatch_code()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>type_mismatch_in_query_parameter_returns_400_with_type_mismatch_code()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.032s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-type_mismatch_in_query_parameter_returns_400_with_type_mismatch_code()">2026-05-12T15:59:42.883+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:42.890+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:42.892+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:42.896+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#typedParam(long)
|
||||
2026-05-12T15:59:42.908+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.typedParam(long): Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'long'; For input string: "not-a-number"
|
||||
2026-05-12T15:59:42.908+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleTypeMismatchException(TypeMismatchException, HttpServletRequest)
|
||||
2026-05-12T15:59:42.909+09:00 WARN 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] c.p.a.p.s.e.RequestExceptionHandler : Type mismatch for parameter. method=GET requestPath=/test-support/typed-param parameter=id errorCode=PRES-014
|
||||
2026-05-12T15:59:42.909+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:42.910+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-014, message=요청 파라미터 타입이 올바르지 않습니다., data=null, errors=null, trac (truncated)...]
|
||||
2026-05-12T15:59:42.911+09:00 DEBUG 3742337 --- [ Test worker] [traceId=5fae806647a77c1e86417cc5db799dd2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'long'; For input string: "not-a-number"]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-type_mismatch_in_query_parameter_returns_400_with_type_mismatch_code()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,312 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - unacceptable_accept_header_returns_406()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">unacceptable_accept_header_returns_406()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>unacceptable_accept_header_returns_406()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.015s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-unacceptable_accept_header_returns_406()">2026-05-12T15:59:43.111+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.111+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.113+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.118+09:00 DEBUG 3742337 --- [ Test worker] [traceId=10782477560cee4162c9c73eda715822] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMediaTypeNotAcceptableException(HttpMediaTypeNotAcceptableException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.119+09:00 WARN 3742337 --- [ Test worker] [traceId=10782477560cee4162c9c73eda715822] c.p.a.p.s.e.RequestExceptionHandler : Not acceptable media type. method=GET requestPath=/test-support/produces-json errorCode=PRES-008
|
||||
2026-05-12T15:59:43.119+09:00 DEBUG 3742337 --- [ Test worker] [traceId=10782477560cee4162c9c73eda715822] o.s.w.s.m.m.a.HttpEntityMethodProcessor : No match for [application/pdf], supported: [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.120+09:00 WARN 3742337 --- [ Test worker] [traceId=10782477560cee4162c9c73eda715822] .m.m.a.ExceptionHandlerExceptionResolver : Failure in @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMediaTypeNotAcceptableException(HttpMediaTypeNotAcceptableException, HttpServletRequest)
|
||||
|
||||
org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation
|
||||
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:288)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:261)
|
||||
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:460)
|
||||
at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:72)
|
||||
at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:176)
|
||||
at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:78)
|
||||
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1227)
|
||||
at org.springframework.test.web.servlet.TestDispatcherServlet.processHandlerException(TestDispatcherServlet.java:144)
|
||||
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1035)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
|
||||
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
|
||||
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:160)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:235)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:493)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:354)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:86)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:132)
|
||||
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:181)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AuthenticationFilter.doFilterInternal(AuthenticationFilter.java:194)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter.doFilterInternal(BearerTokenAuthenticationFilter.java:174)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.OAuth2ProtectedResourceMetadataFilter.doFilterInternal(OAuth2ProtectedResourceMetadataFilter.java:97)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:96)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:337)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:237)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:195)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.ServletRequestPathFilter.doFilter(ServletRequestPathFilter.java:52)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebSecurityConfiguration.java:317)
|
||||
at org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurer$DelegateFilter.doFilter(SecurityMockMvcConfigurer.java:135)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at com.project.auth.config.web.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199)
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest.unacceptable_accept_header_returns_406(ExceptionHandlingIntegrationTest.java:239)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
|
||||
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
|
||||
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
|
||||
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:93)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$0(InterceptingLauncher.java:41)
|
||||
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:40)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.processAllTestClasses(JUnitPlatformTestDefinitionProcessor.java:172)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.access$000(JUnitPlatformTestDefinitionProcessor.java:121)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor.stop(JUnitPlatformTestDefinitionProcessor.java:114)
|
||||
at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.stop(SuiteTestDefinitionProcessor.java:64)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
|
||||
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
|
||||
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
|
||||
at jdk.proxy2/jdk.proxy2.$Proxy6.stop(Unknown Source)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:195)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
|
||||
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
|
||||
|
||||
2026-05-12T15:59:43.122+09:00 WARN 3742337 --- [ Test worker] [traceId=10782477560cee4162c9c73eda715822] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-unacceptable_accept_header_returns_406()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - unauthenticated_request_returns_401_json_with_trace_metadata()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">unauthenticated_request_returns_401_json_with_trace_metadata()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>unauthenticated_request_returns_401_json_with_trace_metadata()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.013s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-unauthenticated_request_returns_401_json_with_trace_metadata()">2026-05-12T15:59:43.071+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.071+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.073+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:43.075+09:00 WARN 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] c.p.a.c.a.s.SecurityAuditTrailWriter : Authentication required. actorId=anonymous method=GET requestPath=/test-support/protected
|
||||
2026-05-12T15:59:43.076+09:00 WARN 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] audit.auth : AUTHENTICATION_REQUIRED eventType="AUTHENTICATION_REQUIRED" actorId="anonymous" method="GET" requestPath="/test-support/protected"
|
||||
2026-05-12T15:59:43.076+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.config.web.SecurityResponseExceptionHandler#handleAuthenticationException(AuthenticationException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.076+09:00 WARN 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] p.a.c.w.SecurityResponseExceptionHandler : Authentication required. exceptionType=InsufficientAuthenticationException method=GET requestPath=/test-support/protected errorCode=AUTH-001
|
||||
2026-05-12T15:59:43.076+09:00 WARN 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] c.p.a.c.a.s.SecurityAuditTrailWriter : Authentication required. actorId=anonymous method=GET requestPath=/test-support/protected
|
||||
2026-05-12T15:59:43.076+09:00 WARN 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] audit.auth : AUTHENTICATION_REQUIRED eventType="AUTHENTICATION_REQUIRED" actorId="anonymous" method="GET" requestPath="/test-support/protected"
|
||||
2026-05-12T15:59:43.077+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.077+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=AUTH-001, message=인증이 필요합니다., data=null, errors=null, traceId=1f8505a2 (truncated)...]
|
||||
2026-05-12T15:59:43.078+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1f8505a2974ce513ea52f13d821ca22c] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-unauthenticated_request_returns_401_json_with_trace_metadata()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,311 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - uncaught_runtime_exception_hits_safety_net_and_returns_common_999(CapturedOutput)</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">uncaught_runtime_exception_hits_safety_net_and_returns_common_999(CapturedOutput)</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>uncaught_runtime_exception_hits_safety_net_and_returns_common_999(CapturedOutput)</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.019s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-uncaught_runtime_exception_hits_safety_net_and_returns_common_999(CapturedOutput)">2026-05-12T15:59:43.014+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.015+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.016+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.019+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0f775dfa8168654d91b37e2db4805484] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#uncaughtRuntime()
|
||||
2026-05-12T15:59:43.020+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0f775dfa8168654d91b37e2db4805484] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ApplicationExceptionHandler#handleUncaughtException(Exception, HttpServletRequest)
|
||||
2026-05-12T15:59:43.020+09:00 ERROR 3742337 --- [ Test worker] [traceId=0f775dfa8168654d91b37e2db4805484] c.p.a.p.s.e.ApplicationExceptionHandler : Uncaught exception reached @ExceptionHandler safety net. exceptionType=java.lang.IllegalStateException method=GET requestPath=/test-support/uncaught
|
||||
|
||||
java.lang.IllegalStateException: simulated unknown failure
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.uncaughtRuntime(ExceptionHandlingIntegrationTest.java:345)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:184)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
|
||||
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
|
||||
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:160)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:235)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:493)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:354)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:86)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:132)
|
||||
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:181)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.AuthenticationFilter.doFilterInternal(AuthenticationFilter.java:194)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter.doFilterInternal(BearerTokenAuthenticationFilter.java:174)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.oauth2.server.resource.web.OAuth2ProtectedResourceMetadataFilter.doFilterInternal(OAuth2ProtectedResourceMetadataFilter.java:97)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
|
||||
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:96)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:231)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:244)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:337)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
|
||||
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:141)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:237)
|
||||
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:195)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.ServletRequestPathFilter.doFilter(ServletRequestPathFilter.java:52)
|
||||
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebSecurityConfiguration.java:317)
|
||||
at org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurer$DelegateFilter.doFilter(SecurityMockMvcConfigurer.java:135)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at com.project.auth.config.web.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127)
|
||||
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199)
|
||||
at com.project.auth.ExceptionHandlingIntegrationTest.uncaught_runtime_exception_hits_safety_net_and_returns_common_999(ExceptionHandlingIntegrationTest.java:200)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
|
||||
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
|
||||
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
|
||||
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
|
||||
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
|
||||
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
|
||||
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
|
||||
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
|
||||
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
|
||||
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
|
||||
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
|
||||
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
|
||||
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
|
||||
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
|
||||
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:93)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$0(InterceptingLauncher.java:41)
|
||||
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
|
||||
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:40)
|
||||
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:48)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.processAllTestClasses(JUnitPlatformTestDefinitionProcessor.java:172)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor$CollectThenExecuteTestDefinitionConsumer.access$000(JUnitPlatformTestDefinitionProcessor.java:121)
|
||||
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestDefinitionProcessor.stop(JUnitPlatformTestDefinitionProcessor.java:114)
|
||||
at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.stop(SuiteTestDefinitionProcessor.java:64)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
|
||||
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
|
||||
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
|
||||
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
|
||||
at jdk.proxy2/jdk.proxy2.$Proxy6.stop(Unknown Source)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:195)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
|
||||
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
|
||||
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
|
||||
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
|
||||
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
|
||||
|
||||
2026-05-12T15:59:43.026+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0f775dfa8168654d91b37e2db4805484] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.027+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0f775dfa8168654d91b37e2db4805484] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=COMMON-999, message=예상하지 못한 오류가 발생했습니다., data=null, errors=null, trace (truncated)...]
|
||||
2026-05-12T15:59:43.027+09:00 DEBUG 3742337 --- [ Test worker] [traceId=0f775dfa8168654d91b37e2db4805484] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.IllegalStateException: simulated unknown failure]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-uncaught_runtime_exception_hits_safety_net_and_returns_common_999(CapturedOutput)">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - unknown_route_returns_404_with_resource_not_found_code()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">unknown_route_returns_404_with_resource_not_found_code()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>unknown_route_returns_404_with_resource_not_found_code()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.016s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-unknown_route_returns_404_with_resource_not_found_code()">2026-05-12T15:59:43.141+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.141+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.142+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.147+09:00 DEBUG 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]
|
||||
2026-05-12T15:59:43.150+09:00 DEBUG 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] o.s.w.s.r.ResourceHttpRequestHandler : Resource not found
|
||||
2026-05-12T15:59:43.151+09:00 DEBUG 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleNoResourceFoundException(NoResourceFoundException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.151+09:00 WARN 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] c.p.a.p.s.e.RequestExceptionHandler : No resource found. method=GET requestPath=/test-support/this-path-does-not-exist resourcePath=test-support/this-path-does-not-exist errorCode=PRES-005
|
||||
2026-05-12T15:59:43.152+09:00 DEBUG 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.152+09:00 DEBUG 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-005, message=요청한 리소스를 찾을 수 없습니다., data=null, errors=null, traceId (truncated)...]
|
||||
2026-05-12T15:59:43.153+09:00 DEBUG 3742337 --- [ Test worker] [traceId=e9cd3979adac83f9cbc93e80ca52e98a] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource test-support/this-path-does-not-exist for request '/test-support/this-path-does-not-exist'.]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-unknown_route_returns_404_with_resource_not_found_code()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - unsupported_content_type_returns_415()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">unsupported_content_type_returns_415()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>unsupported_content_type_returns_415()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.012s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-unsupported_content_type_returns_415()">2026-05-12T15:59:43.098+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:43.098+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:43.099+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:43.102+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController#bodyEndpoint(Map)
|
||||
2026-05-12T15:59:43.104+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in java.lang.String com.project.auth.ExceptionHandlingIntegrationTest$TestExceptionController.bodyEndpoint(java.util.Map<java.lang.String, java.lang.Object>): Content-Type 'application/xml' is not supported
|
||||
2026-05-12T15:59:43.104+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException, HttpServletRequest)
|
||||
2026-05-12T15:59:43.104+09:00 WARN 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] c.p.a.p.s.e.RequestExceptionHandler : Unsupported media type. method=POST requestPath=/test-support/body contentType=application/xml errorCode=PRES-007
|
||||
2026-05-12T15:59:43.105+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:43.105+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-007, message=지원하지 않는 Content-Type입니다., data=null, errors=null, tr (truncated)...]
|
||||
2026-05-12T15:59:43.106+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1fc67023b5c5d3760c89f58fb30531f5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/xml' is not supported]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-unsupported_content_type_returns_415()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,114 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - unsupported_method_returns_405_json()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ExceptionHandlingIntegrationTest</a> >
|
||||
<span class="breadcrumb">unsupported_method_returns_405_json()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>unsupported_method_returns_405_json()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.015s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-unsupported_method_returns_405_json()">2026-05-12T15:59:42.868+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:42.868+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:42.869+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:42.875+09:00 DEBUG 3742337 --- [ Test worker] [traceId=03d953263f8b643df535f9f48a754c39] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.RequestExceptionHandler#handleMethodNotSupportedException(HttpRequestMethodNotSupportedException, HttpServletRequest)
|
||||
2026-05-12T15:59:42.876+09:00 WARN 3742337 --- [ Test worker] [traceId=03d953263f8b643df535f9f48a754c39] c.p.a.p.s.e.RequestExceptionHandler : Method not supported. method=POST requestPath=/test-support/protected attemptedMethod=POST errorCode=PRES-003
|
||||
2026-05-12T15:59:42.876+09:00 DEBUG 3742337 --- [ Test worker] [traceId=03d953263f8b643df535f9f48a754c39] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:42.877+09:00 DEBUG 3742337 --- [ Test worker] [traceId=03d953263f8b643df535f9f48a754c39] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-003, message=지원하지 않는 HTTP 메서드입니다., data=null, errors=null, traceI (truncated)...]
|
||||
2026-05-12T15:59:42.878+09:00 DEBUG 3742337 --- [ Test worker] [traceId=03d953263f8b643df535f9f48a754c39] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' is not supported]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-unsupported_method_returns_405_json()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,121 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - openApiDocsExposeAuthenticatedUserEndpoint()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.SwaggerDocumentationIntegrationTest</a> >
|
||||
<span class="breadcrumb">openApiDocsExposeAuthenticatedUserEndpoint()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>openApiDocsExposeAuthenticatedUserEndpoint()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.744s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-openApiDocsExposeAuthenticatedUserEndpoint()">2026-05-12T15:59:44.976+09:00 INFO 3742337 --- [o-auto-1-exec-1] [traceId=] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
|
||||
2026-05-12T15:59:44.976+09:00 INFO 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
|
||||
2026-05-12T15:59:44.976+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : Detected StandardServletMultipartResolver
|
||||
2026-05-12T15:59:44.976+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : Detected AcceptHeaderLocaleResolver
|
||||
2026-05-12T15:59:44.978+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@702d40d0
|
||||
2026-05-12T15:59:44.978+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.support.SessionFlashMapManager@66594b19
|
||||
2026-05-12T15:59:44.978+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data
|
||||
2026-05-12T15:59:44.978+09:00 INFO 3742337 --- [o-auto-1-exec-1] [traceId=] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:44.993+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] o.s.web.servlet.DispatcherServlet : GET "/v3/api-docs", parameters={}
|
||||
2026-05-12T15:59:44.994+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springdoc.webmvc.api.OpenApiWebMvcResource#openapiJson(HttpServletRequest, String, Locale)
|
||||
2026-05-12T15:59:45.405+09:00 INFO 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] o.springdoc.api.AbstractOpenApiResource : Init duration for springdoc-openapi is: 399 ms
|
||||
2026-05-12T15:59:45.423+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/json', given [*/*] and supported [application/json]
|
||||
2026-05-12T15:59:45.424+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] m.m.a.RequestResponseBodyMethodProcessor : Writing [{7b226f70656e617069223a22332e312e30222c22696e666f223a7b227469746c65223a2250726f6a6563742041757468205 (truncated)...]
|
||||
2026-05-12T15:59:45.428+09:00 DEBUG 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] o.s.web.servlet.DispatcherServlet : Completed 200 OK
|
||||
2026-05-12T15:59:45.430+09:00 INFO 3742337 --- [o-auto-1-exec-1] [traceId=ca31356bb675ba6d7fb4865ed6a6fd21] http.access : ACCESS eventType="HTTP_ACCESS" method="GET" requestPath="/v3/api-docs" status="200" durationMs="446" remoteIp="127.0.0.0" actorId="anonymous" result="success"
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-openApiDocsExposeAuthenticatedUserEndpoint()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - class_level_validation_failure_is_reported_under_global_bucket()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ValidationExceptionHandlerIntegrationTest</a> >
|
||||
<span class="breadcrumb">class_level_validation_failure_is_reported_under_global_bucket()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>class_level_validation_failure_is_reported_under_global_bucket()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.037s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-class_level_validation_failure_is_reported_under_global_bucket()">2026-05-12T15:59:46.115+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:46.115+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:46.116+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:46.120+09:00 DEBUG 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ValidationExceptionHandlerIntegrationTest$ValidationTestController#signup(SignupRequest)
|
||||
2026-05-12T15:59:46.124+09:00 DEBUG 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json" to [SignupRequest[password=abc, passwordConfirm=different]]
|
||||
2026-05-12T15:59:46.135+09:00 DEBUG 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ValidationExceptionHandler#handleValidationException(MethodArgumentNotValidException)
|
||||
2026-05-12T15:59:46.136+09:00 WARN 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] c.p.a.p.s.e.ValidationExceptionHandler : Validation failed: {__global__=[passwords must match]}
|
||||
2026-05-12T15:59:46.138+09:00 DEBUG 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:46.138+09:00 DEBUG 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-001, message=요청 값이 올바르지 않습니다., data=null, errors={__global__=[pas (truncated)...]
|
||||
2026-05-12T15:59:46.142+09:00 DEBUG 3742337 --- [ Test worker] [traceId=3a984c61c5768cf40e72193588812db9] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in java.lang.String com.project.auth.ValidationExceptionHandlerIntegrationTest$ValidationTestController.signup(com.project.auth.ValidationExceptionHandlerIntegrationTest$SignupRequest): [Error in object 'signupRequest': codes [PasswordsMatch.signupRequest,PasswordsMatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [signupRequest]; arguments []; default message []]; default message [passwords must match]] ]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-class_level_validation_failure_is_reported_under_global_bucket()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - constraint_violation_uses_json_pointer_for_property_path()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ValidationExceptionHandlerIntegrationTest</a> >
|
||||
<span class="breadcrumb">constraint_violation_uses_json_pointer_for_property_path()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>constraint_violation_uses_json_pointer_for_property_path()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.022s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-constraint_violation_uses_json_pointer_for_property_path()">2026-05-12T15:59:46.151+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:46.151+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:46.153+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms
|
||||
2026-05-12T15:59:46.155+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1c3315bffbb2eb84202975305487dab8] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ValidationExceptionHandlerIntegrationTest$ValidationTestController#search(String)
|
||||
2026-05-12T15:59:46.166+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1c3315bffbb2eb84202975305487dab8] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ValidationExceptionHandler#handleConstraintViolationException(ConstraintViolationException)
|
||||
2026-05-12T15:59:46.167+09:00 WARN 3742337 --- [ Test worker] [traceId=1c3315bffbb2eb84202975305487dab8] c.p.a.p.s.e.ValidationExceptionHandler : Constraint violation: {/search/q=[must be at least 2 chars]}
|
||||
2026-05-12T15:59:46.167+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1c3315bffbb2eb84202975305487dab8] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:46.167+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1c3315bffbb2eb84202975305487dab8] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-006, message=요청 값이 제약 조건을 위반했습니다., data=null, errors={/search/q=[ (truncated)...]
|
||||
2026-05-12T15:59:46.168+09:00 DEBUG 3742337 --- [ Test worker] [traceId=1c3315bffbb2eb84202975305487dab8] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [jakarta.validation.ConstraintViolationException: search.q: must be at least 2 chars]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-constraint_violation_uses_json_pointer_for_property_path()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - field_level_and_class_level_violations_coexist_in_response()</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<a class="breadcrumb" href="index.html">com.project.auth.ValidationExceptionHandlerIntegrationTest</a> >
|
||||
<span class="breadcrumb">field_level_and_class_level_violations_coexist_in_response()</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :bootstrap:test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :bootstrap:test</h2>
|
||||
<h1>field_level_and_class_level_violations_coexist_in_response()</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="" href="#">standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.012s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<h2>standard output</h2>
|
||||
<span class="code">
|
||||
<pre id="root-0-test-stdout-field_level_and_class_level_violations_coexist_in_response()">2026-05-12T15:59:46.175+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
|
||||
2026-05-12T15:59:46.175+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
|
||||
2026-05-12T15:59:46.176+09:00 INFO 3742337 --- [ Test worker] [traceId=] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms
|
||||
2026-05-12T15:59:46.178+09:00 DEBUG 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.project.auth.ValidationExceptionHandlerIntegrationTest$ValidationTestController#signup(SignupRequest)
|
||||
2026-05-12T15:59:46.179+09:00 DEBUG 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json" to [SignupRequest[password=, passwordConfirm=different]]
|
||||
2026-05-12T15:59:46.180+09:00 DEBUG 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.project.auth.presentation.support.exception.ValidationExceptionHandler#handleValidationException(MethodArgumentNotValidException)
|
||||
2026-05-12T15:59:46.180+09:00 WARN 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] c.p.a.p.s.e.ValidationExceptionHandler : Validation failed: {/password=[password is required], __global__=[passwords must match]}
|
||||
2026-05-12T15:59:46.181+09:00 DEBUG 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/yaml]
|
||||
2026-05-12T15:59:46.181+09:00 DEBUG 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ApiResult[success=false, code=PRES-001, message=요청 값이 올바르지 않습니다., data=null, errors={/password=[pass (truncated)...]
|
||||
2026-05-12T15:59:46.182+09:00 DEBUG 3742337 --- [ Test worker] [traceId=40737d1324e5f0819295bae39d8673e8] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in java.lang.String com.project.auth.ValidationExceptionHandlerIntegrationTest$ValidationTestController.signup(com.project.auth.ValidationExceptionHandlerIntegrationTest$SignupRequest) with 2 errors: [Field error in object 'signupRequest' on field 'password': rejected value []; codes [NotBlank.signupRequest.password,NotBlank.password,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [signupRequest.password,password]; arguments []; default message [password]]; default message [password is required]] [Error in object 'signupRequest': codes [PasswordsMatch.signupRequest,PasswordsMatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [signupRequest]; arguments []; default message []]; default message [passwords must match]] ]
|
||||
</pre>
|
||||
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-field_level_and_class_level_violations_coexist_in_response()">Copy</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:59:51 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||