Acesso recusado

Olá caros, tive um problema com meu sistema operacional (Windows 10) e tive que formatar meu computador. Estou programando no Eclipse com JAVA no Spring Boot e coloquei o Swagger. Quando eu subo para servidor, depois de ter compilado (java -jar target/nomeDoArquivo.Jar) e tento abrir o Swagger (http://localhost:8080/swagger-ui) da este erro “O acesso a localhost foi recusado” no navegador.
HTTP ERROR 403
Como eu resolvo isto?

Grato.

Vc está com a dependência do spring-security no projeto? Se sim, vc deve configurar para que toda requisição ao swagger não precise de autenticação.

Tenho estas:

	<!-- Dependencias para autenticação com JWT -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-security</artifactId>
	</dependency>

	<dependency>
		<groupId>io.jsonwebtoken</groupId>
		<artifactId>jjwt</artifactId>
		<version>0.2</version>
	</dependency>

	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpclient</artifactId>
		<scope>test</scope>
	</dependency>

Então é o que falei msm. Ao adicionar a dependência do spring-security (spring-boot-starter-security), automaticamente suas rotas já ficarão seguras, até a do swagger.

Com isso, vc deve fazer a liberação através de uma configuração. É algo mais ou menos assim:

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

  @Override
  public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(
      "/v2/api-docs",
      "/configuration/ui",
      "/swagger-resources/**",
      "/configuration/security",
      "/swagger-ui.html",
      "/webjars/**"
    );
  }
}

Porém, isso pode mudar de acordo com a versão do spring e do swagger que vc está usando. De qualquer forma, tu pode pesquisar por spring security allow swagger que vc vai achar bastante coisa.

1 curtida

Poxa, não consegui. tenho as seguintes classes:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SuppressWarnings("deprecation")
@Configuration
@EnableWebMvc
public class CorsConfiguration extends WebMvcConfigurerAdapter {

	@Override
	public void addCorsMappings(CorsRegistry registry) {

		registry
			.addMapping("/**")
			.allowedOrigins("*")
			.allowedMethods("GET", "POST", "PUT", "DELETE");
	}
}
import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableJpaRepositories(basePackages = "br.com.eueu")
@EnableTransactionManagement
public class JpaConfiguration {

	@Bean
	public LocalEntityManagerFactoryBean entityManagerFactory() {
		LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
		factoryBean.setPersistenceUnitName("conexao_mysql");
		return factoryBean;
	}

	@Bean
	public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
		JpaTransactionManager transactionManager = new JpaTransactionManager();
		transactionManager.setEntityManagerFactory(entityManagerFactory);
		return transactionManager;
	}
}
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

import br.com.cotiinformatica.security.JwtSecurity;

@Configuration
@EnableWebSecurity
public class JwtConfiguration extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {

		http.csrf().disable()
				.addFilterAfter(new JwtSecurity(), UsernamePasswordAuthenticationFilter.class)
				.authorizeRequests()
				.antMatchers(HttpMethod.POST, "/api/clientes-login").permitAll()
				.antMatchers(HttpMethod.POST, "/api/clientes").permitAll()
				.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 
				.anyRequest()
				.authenticated();
	}

	// configuração para liberar a documentação do SWAGGER
	private static final String[] SWAGGER = {
			"/v2/api-docs", "/swagger-resources", "/swagger-resources/**", "/configuration/ui",
			"/configuration/security", "/swagger-ui.html", "/webjars/**",
			"/v3/api-docs/**", "/swagger-ui/**"
	};

	@Override
	public void configure(WebSecurity web) throws Exception {
		web.ignoring().antMatchers(SWAGGER);
	}
}
import java.util.Collections;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

	@Bean
	public Docket api() {		
		return new Docket(DocumentationType.SWAGGER_2)
				.select()
				.apis(RequestHandlerSelectors.basePackage("br.com.eueu"))
				.paths(PathSelectors.ant("/**"))
				.build()
				.apiInfo(apiInfo());
	}
	
	private ApiInfo apiInfo() {
		return new ApiInfo(
				"ECommerce",
				"Sistema de API desenvolvido em SprignBoot com Hibernate e JPA",
				"Versão 1.0",
				"http://www.eueueu.com.br",
				new Contact("EU Informática", "http://www.eueueueueu.com.br", 
						"contato@eueueueueu.com.br"),
				"Licença da API",
				"http://www.eueueueu.com.br",
				Collections.emptyList()
				);
	}		
}

Este sistema funcionava na minha máquina, foi depois da formatação e que ficou assim, dando acesso recusado no navegado.

Não preocupe com configuração de CORS. A parte que vc tem que alterar é a do spring-security apenas (onde tem o @EnableWebSecurity).

Tem que adicionar mais um permitAll para as url do swagger, ex:

.antMatchers("/swagger-ui/**", "/swagger-resources/**", "/v2/api-docs").permitAll()

Só precisa ver qual a versão do swagger que vc usa para colocar os patterns adequados.

você diz aqui:

@Override
protected void configure(HttpSecurity http) throws Exception {

	http.csrf().disable()
			.addFilterAfter(new JwtSecurity(), UsernamePasswordAuthenticationFilter.class)
			.authorizeRequests()
			.antMatchers(HttpMethod.POST, "/api/clientes-login").permitAll()
			.antMatchers(HttpMethod.POST, "/api/clientes").permitAll()
			.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 
			.antMatchers("/swagger-ui/**", "/swagger-resources/**", "/v2/api-docs").permitAll()
			.anyRequest()
			.authenticated();		
	
}

Eu fiz, mas continuou dando " O acesso a localhost foi recusado" -

Será que é o firewall?

Poxa, que mancada! Estava acessando o link errado :scream:. Espero que este poster possa ajudar alguém, o link correto http://localhost:8080/swagger-ui/index.html

1 curtida