Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Bloque de código
languagejava
titleSecurityConfig
################# EnPara versiones de Spring-Boot anteriores a 2.7
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Value( "${server.scopes}" )
    private String[] serverScopes;
 
    @Value( "${app.server.path}" )
    private String apiPath;
 
    @Bean
    public FundeWebJSLoggingAuthorizationFilter loggingFilterBean() {
       return new FundeWebJSLoggingAuthorizationFilter();
    }
 
    @Override
    protected void configure( HttpSecurity http ) throws Exception {
        http.requestMatchers().antMatchers( "/public/**" ).and().requestMatchers().antMatchers( apiPath + "/**" ).and()
        .sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS )
        // configuro politica de sesion sin estado
        .and().cors() // Aniado configuracion CORS por defecto
                .and().csrf().disable().authorizeRequests().mvcMatchers( apiPath + "/public/**" ).permitAll()
        .mvcMatchers( apiPath + "/**" ).hasAnyAuthority( serverScopes ).anyRequest().authenticated().and()
        .addFilterAfter( loggingFilterBean(), BearerTokenAuthenticationFilter.class )
        .oauth2ResourceServer().jwt();
    }
}

############### O bien:

############### En versiones de Spring-Boot 2.7.X
public class SecurityConfig {
 
    @Value( "${server.scopes}" )
    private String[] serverScopes;
 
    @Value( "${app.server.path}" )
    private String apiPath;
 
    @Bean
    public FundeWebJSLoggingAuthorizationFilter loggingFilterBean() {
       return new FundeWebJSLoggingAuthorizationFilter();
    }
 
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.requestMatchers().antMatchers( "/public/**" ).and().requestMatchers().antMatchers( apiPath + "/**" ).and()
        .sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS )
        // configuro politica de sesion sin estado
        .and().cors() // Aniado configuracion CORS por defecto
                .and().csrf().disable().authorizeRequests().mvcMatchers( apiPath + "/public/**" ).permitAll()
        .mvcMatchers( apiPath + "/**" ).hasAnyAuthority( serverScopes ).anyRequest().authenticated().and()
        .addFilterAfter( loggingFilterBean(), BearerTokenAuthenticationFilter.class )
        .oauth2ResourceServer().jwt();
 
        return http.build();
    }
}


a. Hay que eliminar dicha clase SecurityConfig.


Info

La configuración de seguridad estándar se realizará, a partir de ahora, en la clase FundeWebJSSecurityConfig incluida en la librería fundewebjs-spring-boot-starter.
Si la configuración actual es diferente por que se validan otros paths, otros claims, se ha configurado el loa, se ha modificado el tratamiento de excepciones, etc., se recomienda mantener el archivo SecurityConfig y establecer en el application.properties (de local y del repo de Helm Chart), la property: fdwjs.starter.security.enable=false.

...

Una vez realizados todos los cambios, hay que comprobar:

- que la aplicación despliega en local correctamente.
- que los tests se siguen pasando con normalidad.
- probar que los endpoints siguen funcionando, con el foco en la correcta securización con los tokens oauth.
- mergear a desarrollo y comprobar que la imagen nueva ha desplegado y que todo funciona correctamente.

...

Cambios Spring-Boot 2.7.X


Como se ha mencionado anteriormente, el parent FundeWebJS se ha desarrollado con la versión de Spring-Boot 2.7.10.
Si nuestro proyecto estaba desarrollado con versiones anteriores de Spring-Boot, es posible que haya que realizar modificaciones en nuestro código para adaptarlo a 2.7.10.

En la sección de Referencias se dejan enlaces a las guías de migración de cada versión de Spring-Boot.
Algunos cambios conocidos en aplicaciones existentes:

  • SecurityConfig: La clase WebSecurityConfigurerAdapter está deprecada. Hay que eliminarla y crear la configuración con SecurityFilterChain.
  • Junit: La versión de Junit se ha actualizado de 4 a 5. Algunas clases empleadas en los tests pueden haberse modificado. Se pueden buscar las equivalentes en Junit 5 o seguir manteniendo Junit 4 con:

Bloque de código
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • @EntityScan ahora soporta el atributo basePackages para especificar el escaneado de entidades en diferentes paquetes.

  • ... esta lista se irá incrementando conforme se vayan descubriendo modificaciones....

    Info

    Ver la sección de Referencias para ampliar información.


...

Dudas y soporte

Si se tiene alguna duda o problema siguiendo esta página, poner Jira a:

...