Swagger访问401错误

2020-06-12

问题描述:

下载了一个开源系统ruoyi,里面自带swagger,但是访问的时候提示401错误。

{
  "msg": "请求访问:/test/user/1,认证失败,无法访问系统资源",
  "code": 401
}

两个方式解决:
1.在Securityconfig里增加过滤的路径
这里说明一下,新增加的swagger control路径是 /srs/v1,swqgger配置的路径默认自带前缀/dev-api,加这个过滤路径的时候前缀不带。

    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
        httpSecurity
                // CRSF禁用,因为不使用session
                .csrf().disable()
                // 认证失败处理类
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                // 基于token,所以不需要session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                // 过滤请求
                .authorizeRequests()
                // 对于登录login 验证码captchaImage 允许匿名访问
                .antMatchers("/login", "/captchaImage").anonymous()
                .antMatchers(
                        HttpMethod.GET,
                        "/*.html",
                        "/**/*.html",
                        "/**/*.css",
                        "/**/*.js"
                ).permitAll()
                .antMatchers("/profile/**").anonymous()
                .antMatchers("/common/download**").anonymous()
                .antMatchers("/common/download/resource**").anonymous()
                .antMatchers("/swagger-ui.html").anonymous()
                .antMatchers("/swagger-resources/**").anonymous()
                .antMatchers("/webjars/**").anonymous()
                .antMatchers("/*/api-docs").anonymous()
                .antMatchers("/druid/**").anonymous()
                //增加srs的过滤名单 2020-6-2 dev-api/v1/srs/
                .antMatchers("/srs/v1/**").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // 添加JWT filter
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }

测试结果结果成功:


image.png

2.如果上面的过滤不增加,那么就在请求的post中填入tonken
先把token拷贝出来


image.png

然后在swagger页面中填入

image.png

填入刚才拷贝的token值


image.png

当然需要出现这个按钮的话需要对该下swagger的配置类,加上以下两句

                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
image.png

这个带上后就能成功访问了。

你可能感兴趣的:(Swagger访问401错误)