springboot +security部署swagger2




前言

如何在springboot+security项目上部署swagger2 ,并遇到请求拦截问题的解决




一、swagger2是什么?

Swagger2是可以快速生成RESTful API 文档框架,

可以用于生成、描述、调用和可视化 RESTful 风格的 Web 服务:

  1. 接口文档在线自动生成,文档随接口变动实时更新,节省维护成本

  2. 支持在线接口测试,不依赖第三方工具



二、使用步骤



1.springboot集成swagger,在pom.xml上添加依赖

代码如下(示例):

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <!--swagger ui 默认模板-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>



2.创建Swagger2Config配置文件

代码如下(示例):

@Configuration
@EnableSwagger2  //启动配置类
public class Swagger2Config {

    @Bean
    public Docket createRestApi() {
        ParameterBuilder ticketPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        ticketPar.name("Authorization").description("user ticket")//Token 以及Authorization 为自定义的参数,session保存的名字是哪个就可以写成那个
                .modelRef(new ModelRef("string")).parameterType("header")
                .required(false).build(); //header中的ticket参数非必填,传空也可以
        pars.add(ticketPar.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.crazyread.controller"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("疯狂阅读接口文档 RESTful APIs")
                .description("ks wms RESTful APIs")
                .termsOfServiceUrl("http://localhost:80/crazyread/doc.html")
                .version("1.0")
                .build();
    }

}

如果你项目使用了security那么你所有请求都会被拦截,需要你登陆时生成的token验证才能请求成

3.最后在controller类中配置对应注释

代码如下(示例):

RestController
@RequestMapping("/user")
@Api(value = "用户管理 controller" ,tags = {"用户管理接口统计"})
public class AdminController {
    @Autowired
    UserMapper userMapper;
    @Autowired
    UserServiceImpl userService;
    @Autowired
    UserAuthorityMapper userAuthorityMapper;
    @Autowired
    UserDetailsServiceImpl userDetailsService;



    /**
     * 获取用户信息接口
     * @param principal
     * @return
     */
    @GetMapping("/userInfo")
    @ApiOperation(value = "获取用户信息接口")
    public Result userInfo(Principal principal){
        User user = userMapper.selUserByUsername(principal.getName());
        return Result.succ(MapUtil.builder()
                .put("id", user.getId())
                .put("username", user.getUsername())
                .put("email", user.getEmail())
                .put("created", user.getCreated())
                .map()
        );
    }
}

启动项目成功后,打开http://localhost/swagger-ui.html ,但是你会发现页面显示空白它需要你登陆

这是因为你在springboot使用security,它会对所有请求接口拦截,你需要登录拿到token做一个验证,如果每次使用接口都要请求就很麻烦。所以可以在securityconfig配置下 设置免请求如下:

             // 配置拦截规则
                .and()
                .authorizeRequests()
                .antMatchers( "/swagger-ui.html",
                        "/v2/**",
                        "/swagger-resources/**",
                        "/webjars/springfox-swagger-ui/**").permitAll()
                .anyRequest().authenticated()

然后再次打开 http://localhost/swagger-ui.html,就能看见在线文档了

效果

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值