配置swagger用于弹簧启动,弹簧安全JWT

时间:2017-04-10 09:39:14

标签: java spring spring-security jwt swagger

我正在尝试使用JWT的Spring安全性开发Spring Boot REST API并保护它。

我正在使用swagger记录我的端点,但我无法访问文件swagger.json。

Swagger得到我的错误:

401 : {"timestamp":1491816380377,"status":401,"error":"Unauthorized",
"message":"Authentication Failed: No JWT token found in request headers",
"path":"/api/swagger.json"} 
http://localhost:8080/api/swagger.json

这是我的WebSecurityConfig:

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

    @Autowired
    private JwtAuthenticationEntryPoint unauthorizedHandler;

    @Autowired
    private JwtAuthenticationProvider authenticationProvider;

    @Bean
    @Override
    public AuthenticationManager authenticationManager() throws Exception {

        return new ProviderManager(Arrays.asList(authenticationProvider));
    }

    @Bean
    public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception {
        JwtAuthenticationTokenFilter authenticationTokenFilter = new JwtAuthenticationTokenFilter();
        authenticationTokenFilter.setAuthenticationManager(authenticationManager());
        authenticationTokenFilter.setAuthenticationSuccessHandler(new JwtAuthenticationSuccessHandler());
        return authenticationTokenFilter;
    }

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.csrf().disable().authorizeRequests()
                .antMatchers("/swagger/**").permitAll()
                .antMatchers("/api/swagger.json").permitAll()
                .antMatchers(HttpMethod.POST, "/login").permitAll()
                .anyRequest().authenticated();

        httpSecurity
                .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
    }
}

但此规则不起作用:

.antMatchers("/api/swagger.json").permitAll()

0 个答案:

没有答案