100 lines
6.4 KiB
HTML
100 lines
6.4 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>ResourceServerSecurityConfiguration.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</a> > <span class="el_source">ResourceServerSecurityConfiguration.java</span></div><h1>ResourceServerSecurityConfiguration.java</h1><pre class="source lang-java linenums">package com.project.auth.config.auth;
|
|
|
|
import com.project.auth.config.auth.security.KeycloakAuthenticatedUserFactory;
|
|
import com.project.auth.config.auth.security.KeycloakGrantedAuthoritiesConverter;
|
|
import com.project.auth.config.auth.security.KeycloakJwtAuthenticationConverter;
|
|
import com.project.auth.config.auth.security.SecurityActorIdResolver;
|
|
import com.project.auth.config.auth.security.SecurityAuditTrailWriter;
|
|
import com.project.auth.config.auth.security.SecurityExceptionHandler;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.core.convert.converter.Converter;
|
|
import org.springframework.http.HttpMethod;
|
|
import org.springframework.security.authentication.AbstractAuthenticationToken;
|
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
import org.springframework.security.oauth2.jwt.Jwt;
|
|
import org.springframework.security.web.SecurityFilterChain;
|
|
import org.springframework.web.servlet.HandlerExceptionResolver;
|
|
|
|
import java.util.Collection;
|
|
|
|
@Configuration
|
|
<span class="fc" id="L24">public class ResourceServerSecurityConfiguration {</span>
|
|
|
|
private static final String REALM_ROLE_USER = "user";
|
|
|
|
@Bean
|
|
public SecurityActorIdResolver securityActorIdResolver() {
|
|
<span class="fc" id="L30"> return new SecurityActorIdResolver();</span>
|
|
}
|
|
|
|
@Bean
|
|
public SecurityAuditTrailWriter securityAuditTrailWriter(SecurityActorIdResolver securityActorIdResolver) {
|
|
<span class="fc" id="L35"> return new SecurityAuditTrailWriter(securityActorIdResolver);</span>
|
|
}
|
|
|
|
@Bean
|
|
public SecurityExceptionHandler securityExceptionHandler(
|
|
@Qualifier("handlerExceptionResolver") HandlerExceptionResolver handlerExceptionResolver,
|
|
SecurityAuditTrailWriter securityAuditTrailWriter
|
|
) {
|
|
<span class="fc" id="L43"> return new SecurityExceptionHandler(handlerExceptionResolver, securityAuditTrailWriter);</span>
|
|
}
|
|
|
|
@Bean
|
|
public Converter<Jwt, Collection<GrantedAuthority>> keycloakGrantedAuthoritiesConverter() {
|
|
<span class="fc" id="L48"> return new KeycloakGrantedAuthoritiesConverter();</span>
|
|
}
|
|
|
|
@Bean
|
|
public KeycloakAuthenticatedUserFactory keycloakAuthenticatedUserFactory() {
|
|
<span class="fc" id="L53"> return new KeycloakAuthenticatedUserFactory();</span>
|
|
}
|
|
|
|
@Bean
|
|
public Converter<Jwt, ? extends AbstractAuthenticationToken> jwtAuthenticationConverter(
|
|
Converter<Jwt, Collection<GrantedAuthority>> keycloakGrantedAuthoritiesConverter,
|
|
KeycloakAuthenticatedUserFactory keycloakAuthenticatedUserFactory
|
|
) {
|
|
<span class="fc" id="L61"> return new KeycloakJwtAuthenticationConverter(</span>
|
|
keycloakGrantedAuthoritiesConverter,
|
|
keycloakAuthenticatedUserFactory
|
|
);
|
|
}
|
|
|
|
@Bean
|
|
public SecurityFilterChain securityFilterChain(
|
|
HttpSecurity http,
|
|
Converter<Jwt, ? extends AbstractAuthenticationToken> jwtAuthenticationConverter,
|
|
SecurityExceptionHandler securityExceptionHandler
|
|
) throws Exception {
|
|
<span class="fc" id="L73"> return http</span>
|
|
<span class="fc" id="L74"> .csrf(csrf -> csrf.disable())</span>
|
|
<span class="fc" id="L75"> .authorizeHttpRequests(authorize -> authorize</span>
|
|
<span class="fc" id="L76"> .requestMatchers(</span>
|
|
"/actuator/health",
|
|
"/actuator/health/**",
|
|
"/livez",
|
|
"/readyz",
|
|
"/swagger-ui.html",
|
|
"/swagger-ui/**",
|
|
"/v3/api-docs/**"
|
|
<span class="fc" id="L84"> ).permitAll()</span>
|
|
<span class="fc" id="L85"> .requestMatchers(HttpMethod.GET, "/api/v1/auth/me").hasRole(REALM_ROLE_USER)</span>
|
|
<span class="fc" id="L86"> .anyRequest().authenticated()</span>
|
|
)
|
|
<span class="fc" id="L88"> .oauth2ResourceServer(oauth2 -> oauth2</span>
|
|
<span class="fc" id="L89"> .jwt(jwt -> jwt.jwtAuthenticationConverter(jwtAuthenticationConverter))</span>
|
|
<span class="fc" id="L90"> .authenticationEntryPoint(securityExceptionHandler)</span>
|
|
<span class="fc" id="L91"> .accessDeniedHandler(securityExceptionHandler)</span>
|
|
)
|
|
<span class="fc" id="L93"> .exceptionHandling(exceptions -> exceptions</span>
|
|
<span class="fc" id="L94"> .authenticationEntryPoint(securityExceptionHandler)</span>
|
|
<span class="fc" id="L95"> .accessDeniedHandler(securityExceptionHandler)</span>
|
|
)
|
|
<span class="fc" id="L97"> .build();</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> |