文档章节

swagger结合shiro如何配置

o
 osc_ogi0qclx
发布于 2019/08/24 15:17
字数 885
阅读 28
收藏 0

精选30+云产品,助力企业轻松上云!>>>

为了节省开发人员的时间与成本,swagger插件油然而生,省去您写开发文档的时间好好去快乐的玩耍,不说废话,接下来我将使用github上比较受欢迎的swagger-bootstrap-ui插件进行说明讲解,可能与swagger在配置上有所不同,但是原理差不过,只是在资源文件的<font color="red">过滤</font>方面有所<font color="red">不同</font>,特别是结合了<font color="red">过滤</font>spring security</font>或者是<font color="red">shiro</font>的有尤为注意:

添加依赖

<properties>
		<java.version>1.8</java.version>
		<shiro.version>1.4.0</shiro.version>
		<swagger2.version>2.9.2</swagger2.version>
	</properties>
<!--swagger api文档 start-->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>${swagger2.version}</version>
			<exclusions>
				<exclusion>
					<groupId>io.swagger</groupId>
					<artifactId>swagger-models</artifactId>
				</exclusion>
				<!--<exclusion>-->
				<!--<artifactId>guava</artifactId>-->
				<!--<groupId>com.google.guava</groupId>-->
				<!--</exclusion>-->
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.github.xiaoymin</groupId>
			<artifactId>swagger-bootstrap-ui</artifactId>
			<version>1.9.0</version>
		</dependency>
		<dependency>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-models</artifactId>
			<version>1.5.21</version>
			<exclusions>
				<exclusion>
					<artifactId>swagger-annotations</artifactId>
					<groupId>io.swagger</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<!--shiro安全框架 start-->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-core</artifactId>
			<version>${shiro.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-web</artifactId>
			<version>${shiro.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-ehcache</artifactId>
			<version>${shiro.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-spring</artifactId>
			<version>${shiro.version}</version>
		</dependency>

swagger结合shiro代码分析

由于spring默认是不开放资源文件(如图片,html文件),所以我们要添加一个配置类,让它开放:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import javax.servlet.ServletContext;


@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {

    //  请在properties文件中添加该属性,判断是否开启swagger
    @Value("${swagger.enable}")
    private boolean swaggerEnable;

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/logo.png")
                .addResourceLocations("classpath:/");
        registry.addResourceHandler("/favicon.ico")
                .addResourceLocations("classpath:/");
        // 判断是否启用swagger文档界面,启用则会开放这些资源,让开发者能够访问到
        if (swaggerEnable) {
            registry.addResourceHandler("/doc.html")
                    .addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
        super.addResourceHandlers(registry);
    }

    @SuppressWarnings({"unchecked"})
    @Bean
    public FilterRegistrationBean normalCorsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置你要允许的网站域名,如果全允许则设为 *
        config.addAllowedOrigin("*");
        // 如果要限制 HEADER 或 METHOD 请自行更改
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        // 这个顺序很重要哦,为避免麻烦请设置在最前面
        bean.setOrder(0);
        return bean;
    }

    @Override
    public void setServletContext(ServletContext servletContext) {
        servletContext.setSessionTimeout(12*60*60);
        super.setServletContext(servletContext);
    }
}

import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


/**
 * 仅在测试与开发环境使用
 * @author Anthony
 */
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
@Profile({"dev", "test"}) // 当你有多个properties配置文件时,添加
public class SwaggerConfiguration {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
.apis(RequestHandlerSelectors.basePackage("com.shiro.demo.CRUD.controller")) // 最后面这个是你Controller所在包的位置
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("shiro权限控制")
                .description("restful风格")
                .version("1.0")
                .build();
    }
}

由于我最近在学习shiro,所以就以shiro为基础讲解swagger的用法,接下来是防止shiro过滤swagger文件的配置,如果没有使用shiro或者是spring security的请忽略,谢谢:

 /** 创建一个配置类,创建一个叫做shiroFilter的bean,这就是shiro的过滤器配置类,设置对应的过滤条件和跳转条件,下面我只写了swagger中不需要shiro过滤的文件 **/
@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 配置不会被拦截的链接 顺序判断
        filterChainDefinitionMap.put("/static/**", "anon");
        filterChainDefinitionMap.put("/login", "anon");
        //被shiro拦截的swagger资源放行
        filterChainDefinitionMap.put("/doc.html/**", "anon");
        filterChainDefinitionMap.put("/swagger-resources/**", "anon");
        filterChainDefinitionMap.put("/v2/api-docs/**", "anon");
        filterChainDefinitionMap.put("/webjars/**", "anon");
        filterChainDefinitionMap.put("/swagger-resources/configuration/ui/**", "anon");
        filterChainDefinitionMap.put("/swagger-resources/configuration/security/**", "anon");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}

swagger-bootstrap-ui是集成了swagger并对其进行拓展的接口文档插件,推荐使用 效果演示:

这篇主要讲解shiro和swagger的结合,下一篇我将介绍原生swagger的简单应用

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Swagger权限控制上篇:基于Apache Shiro实现

有很多文章提到,在生产环境中需要关闭Swagger功能,防止系统资源泄露。今天,我结合自己开发过程中的经验,分享一个只需几行代码便可实现让Apache Shiro接管Swagger认证和授权的方法。如果还...

树下魅狐
05/22
13
0
Swagger权限控制下篇:基于Spring Security实现

接上篇《Apache Shiro 接管Swagger认证授权》,有热心网友反应Apache Shiro似乎太简单。针对这个问题,个人不做任何评价(一切技术服务于需求)。今天主要分享内容为:在Spring Security下如...

树下魅狐
05/22
29
0
swagger 配置- ssm

swagger 配置 - ssm swagger 是一个用来看接口的工具,具体效果如下,这里用的是swagger2 1、porm.xml <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artif......

osc_f85py9gf
2019/05/14
4
0
Spring Boot:整合Shiro权限框架

综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证、授权、加密、会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Spring Securi...

朝雨忆轻尘
2019/06/20
0
0
spring-boot 集成 swagger 问题的解决

spring-boot 集成 swagger 网上有许多关于 spring boot 集成 swagger 的教程。按照教程去做,发现无法打开接口界面。 项目由 spring mvc 迁移过来,是一个无界面纯 API 的项目。迁移之前就支...

osc_dh0xu7zu
2018/01/07
15
0

没有更多内容

加载失败,请刷新页面

加载更多

django框架效率

1. django ORM模式提供食物处理类:transaction.Django默认的事务处理方式时改动就提交,每执行一次就立即提交,这就会花费大量的时间用于IO。Django也支持所有工作都完成后才提交事务这种方...

osc_2clpynvs
3分钟前
0
0
Qt编写安防视频监控系统34-onvif事件订阅

一、前言 事件订阅是近期增加的功能,主要是因为遇到越来越多的一个应用场景,能够接收摄像机的报警事件,比如几乎所有的摄像机后面会增加报警输入输出接口,如果用户外接了报警输入,则当触...

飞扬青云
4分钟前
0
0
springboot应用docker部署调用phantomjs出现permission denied修复方法

1. 最近项目中需要对网页生成图片 通过调研发现 phantomjs 转换保真度最好,兼容性不错。因此选择了它。但是在打包作镜像时发现调用 phantomjs 不成功,进入镜像直接使用命令 phantomjs -v 查...

osc_5emtajt2
4分钟前
0
0
Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)

T00ls 每日签到是可以获取 TuBi 的,由于常常忘记签到,导致损失了很多 TuBi 。于是在 T00ls 论坛搜索了一下,发现有不少大佬都写了自己的签到脚本,签到功能实现、定时任务执行以及签到提醒...

osc_w9jimlm8
5分钟前
0
0
springboot~集成elasticsearch的jest

jest是一批操作es的http api接口,你可以像使用普法方法一下操作es,在springboot2.3.0之前,JestClient是支持自动注入的,而在2.3.0之后,你必须为JestClient写一个组件类,通过注入组件类来...

osc_qo2uprmb
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部