Olá Pessoal,
Tenho uma aplicação JSF onde preciso incluir uma página dela em um iframe localizado em um site externo em outro domínio.
Utilizo Spring Security, tentei habilitar o CORS mas não funcionou.
Consegui habilitar a inclusão da página no iframe configurando o contentSecurityPolicy, mas a página é exibida no iframe porém os botões da página não executam nenhuma ação. Acontece isso no Chrome e no Edge de não executar nenhuma ação, já no Firefox funciona normalmente, no Chrome e Edge parece que bloqueiam as ações dos botões do formulário.
Pelo que andei pesquisando parece ser um problema de CORS mas configurei e mesmo assim não funcionou.
Vou postar minhas configurações da Classe SecurityConfig.java
package servicosonline.seguranca;
import java.util.Arrays;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.header.writers.StaticHeadersWriter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
//Minhas configurações...
}
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.cors()
.and().headers().frameOptions().sameOrigin()
.contentSecurityPolicy("form-action 'self'; frame-ancestors 'self' https://www.meusite.com.br);
http.exceptionHandling().accessDeniedPage("/acessonegado.jsf")
.and()
.authorizeRequests()
.antMatchers("/resources/**","/javax.faces.resource/**").permitAll()
.antMatchers("/publico/**").permitAll()
.anyRequest().authenticated()
.and()
.logout().logoutSuccessUrl("/logout.jsf")
.permitAll()
.and()
.formLogin().loginPage("/login.jsf")
.failureUrl("/login.jsf?erro")
.defaultSuccessUrl("/restrito/principal.jsf", true)
.permitAll()
.and()
.httpBasic();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://www.meusite.com.br")); // define os domínios permitidos
configuration.setAllowedMethods(Arrays.asList("GET", "POST")); // define os métodos HTTP permitidos
configuration.setAllowedHeaders(Arrays.asList("Content-Type", "Authorization", "Access-Control-Allow-Origin")); // define os headers permitidos
configuration.setExposedHeaders(Arrays.asList("Access-Control-Allow-Origin"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
Alguém tem alguma solução? Já tentei várias alternativas mas ainda não funcionou. Se alguém tiver alguma solução agradeço imensamente.