Swagger和springfox

时间:2017-04-14 07:36:25

标签: spring-boot swagger swagger-ui swagger-2.0

我正在使用swagger 2.2.2版。如果我去地址,http://localhost:8080/swagger-ui.html ,我将直接获得swagger UI。有没有办法,可以添加一个安全层,比如,在swagger UI显示之前,应该提示用户输入用户ID和密码?

1 个答案:

答案 0 :(得分:0)

有可能,我是通过这种安全配置做到这一点的(假设您使用的是spring):

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.core.userdetails.User;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable();
        final InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        final PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        manager.createUser(User.withUsername("user").password(encoder.encode("password")).roles("ACTUATOR", "ADMIN").build());
        http.authorizeRequests().antMatchers("/swagger-ui**", "/v2/api-docs/**").hasRole("ACTUATOR").and().httpBasic()
                .and().userDetailsService(manager);
    }

}