Try
Janeiro 27, 2022, 12:32pm
#1
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.
Try
Janeiro 27, 2022, 11:37pm
#3
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
Try
Janeiro 28, 2022, 12:29pm
#5
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()
);
}
}
Try
Janeiro 28, 2022, 12:34pm
#6
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.
Try
Janeiro 28, 2022, 3:01pm
#8
Lucas_Camara:
rmitAll()
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?
Try
Janeiro 28, 2022, 3:18pm
#9
Poxa, que mancada! Estava acessando o link errado . Espero que este poster possa ajudar alguém, o link correto http://localhost:8080/ swagger-ui/index.html
1 curtida