2016-08-20 5 views
0

스프링 부트 응용 프로그램에서 swagger를 구성하려면 다음과 같이 this article을 사용해야합니다. 여기 내 SwaggerConfig 클래스스프링 부트 응용 프로그램에 대한 swagger 구성

package com.path.to.project.config; 

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.spi.DocumentationType; 
import springfox.documentation.spring.web.plugins.Docket; 
import springfox.documentation.swagger2.annotations.EnableSwagger2; 

@Configuration 
@EnableSwagger2 
public class SwaggerConfig { 
    @Bean 
    public Docket api() { 
     return new Docket(DocumentationType.SWAGGER_2) 
       .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()) 
       .build(); 
    } 
} 

은 여기 내 WebSecurityConfig입니다 클래스

package com.path.to.project.config; 

import com.path.to.project.jwt.JwtAuthenticationEntryPoint; 
import com.path.to.project.jwt.JwtAuthenticationTokenFilter; 
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.method.configuration.EnableGlobalMethodSecurity; 
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; 

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private JwtAuthenticationEntryPoint unauthorizedHandler; 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Autowired 
    public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { 
     authenticationManagerBuilder.userDetailsService(userDetailsService) 
       .passwordEncoder(passwordEncoder()); 
    } 

    @Bean 
    public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception { 
     return new JwtAuthenticationTokenFilter(); 
    } 

    @Override 
    protected void configure(HttpSecurity httpSecurity) throws Exception { 
     httpSecurity 
       .csrf().disable() 
       .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() 
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() 
       .authorizeRequests() 
       .antMatchers("/auth/**").permitAll() 
       .antMatchers("/register/**").permitAll() 
       .antMatchers("/swagger-ui*").permitAll() 
       .antMatchers("/sysadmin/**").hasRole("SYSADMIN") 
       .antMatchers("/admin/**").hasRole("ADMIN") 
       .antMatchers("/siteadmin/**").hasRole("SITEADMIN") 
       .anyRequest().authenticated(); 

     // Custom JWT based security filter 
     httpSecurity 
       .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

    } 

    @Bean 
    public PasswordEncoder passwordEncoder() { 
     PasswordEncoder encoder = new BCryptPasswordEncoder(); 
     return encoder; 
    } 

} 

그래서 봄 부팅 응용 프로그램을 (내가 구축하고 JBoss에서 배포하는 인 IntelliJ를 사용하고) 나는 다음과 같은 UI를 볼 실행할 때 여기

Swagger UI on local spring-boot app

를 놓친 거지 뭐?

+0

JAR 또는 WAR 배포를 사용합니까? JS/CSS 파일은 현재 어디에 있습니까? – luboskrnac

답변

0

CSS/JS가로드되지 않는 것 같습니다. 브라우저 로그를 확인하여 요청을하는 데 사용 된 URL을 확인하고 httpSecurity를 ​​설정하여 기존 보안 역할과 비슷한 방식으로 해당 리소스를로드 할 수 있도록합니다.

+0

힌트를 보내 주셔서 감사합니다. 내 보안 구성 때문일 수 있습니다. '.css' 및'.js' 파일에 대한 규칙을 추가 할 수 있지만 CSS/JS가로드되지 않는 경우에도 ** api와 그 방법을 보여주기 위해 왜 **하지 않습니까? '.css/js '와 아무 관련이 없습니까? –

+0

추측하지만 기본 Swagger UI는 서버의 swagger.json 파일에 액세스해야합니다. '.css'와'.js' 파일이 로딩되지 않는다면 swagger 파일이 로딩되지 않았을 것입니다. –

0

WebSecurityConfig에서 규칙

.antMatchers ("/ V2/API-문서", "/ 구성/UI", "/ 자신감-자원", "/ 구성/보안", "/ 자신감 다음을 추가 -web.html ","/ webjars/** "). permitAll()

/v2/api-docs - 이것은 봄 보안이 API와 그 방법을 보여줄 수있게합니다. Firebug 또는 크롬 디버그 모드에서 네트워크 트래픽을 모니터링하여 문제를 식별 할 수 있습니다.