반응형
//gradle
implementation 'io.springfox:springfox-swagger2:2.8.0'
implementation 'io.springfox:springfox-swagger-ui:2.8.0'
//maven
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
package com.spring2.nyong.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableWebMvc
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
//extends는 클래스를 확장하는 거고 implements는 인터페이스를 구현하는 것이다.
//extends WebMvcConfigurationSupport 도 가능하다.
@Bean
public Docket swaggerApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(swaggerInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.spring2.nyong.controller"))
.paths(PathSelectors.any())
.build()
.useDefaultResponseMessages(false); // 기본으로 세팅되는 200,401,403,404 메시지 표시 x
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
// -- Static resources
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css");
registry.addResourceHandler("/js/**").addResourceLocations("classpath:/static/js/");
registry.addResourceHandler("/images/**").addResourceLocations("classpath:/static/images/");
}
private ApiInfo swaggerInfo() {
return new ApiInfoBuilder().title("Spring Nyong API Documentation")
.description("뇽이 서버 API에 대한 연동 문서입니다.")
.license("nyong").licenseUrl("https://crazynyong.tistory.com/")
.version("1")
.build();
}
}
package com.spring2.nyong.config;
import com.spring2.nyong.jwt.JwtAuthenticationFilter;
import com.spring2.nyong.jwt.JwtTokenProvider;
import com.spring2.nyong.service.CustomUserDetailService;
import com.spring2.nyong.util.AES256Util;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
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.config.http.SessionCreationPolicy;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import java.io.UnsupportedEncodingException;
@EnableWebSecurity
@RequiredArgsConstructor
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final JwtTokenProvider jwtTokenProvider;
private final CustomUserDetailService userDetailService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
//h2
.headers()
.frameOptions()
.sameOrigin()
// 시큐리티는 기본적으로 세션을 사용
// 여기서는 세션을 사용하지 않기 때문에 세션 설정을 Stateless 로 설정
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
//권한
.authorizeRequests()
.antMatchers("/api/**","/resources/**","/css/**", "/images/**","/configuration/**", "/js/**", "/h2-console/**","/v2/api-docs", "/configuration/**", "/swagger*/**", "/webjars/**")
.permitAll()
//.antMatchers("/**").hasRole("USER")
.anyRequest().authenticated() // 나머지 API 는 전부 인증 필요
.and()
.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider,userDetailService), UsernamePasswordAuthenticationFilter.class)
;
}
}
package com.spring2.nyong.controller;
import com.spring2.nyong.dto.UserDTO;
import com.spring2.nyong.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@Api(tags = {"1. User"}) // UserController를 대표하는 최상단 타이틀 영역에 표시될 값 세팅
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/")
public class UserApiController {
private final UserService userService;
@ApiOperation(value = "회원 가입", notes = "회원을 입력한다.")
@PostMapping("signup")
public Long signUp(@RequestBody UserDTO userDTO) throws Exception{
return userService.signUp(userDTO);
}
}
http://localhost:8080/swagger-ui.html
그리고 들어가면 예쁘게 api 문서가 나온다.
근데 난 swagger 좀 불편한거같다. postman이나 junit test 코드가 더 테스트하기 편하다. 수정사항도 더 적고
반응형
'자바' 카테고리의 다른 글
| java DTO,VO List 정렬 (0) | 2022.08.19 |
|---|---|
| SptringBoot Rest Api Exception (0) | 2022.05.31 |
| 자바 dto,vo 리스트 정렬 list sort (0) | 2022.04.21 |
| string을 VO로 변환, json을 VO로 변환 (0) | 2022.01.26 |
| 자바 스택/리스트 (0) | 2020.06.24 |
댓글