77 lines
5.3 KiB
HTML
77 lines
5.3 KiB
HTML
<?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">project-auth-server</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.14.202510111229</span></div></body></html> |