<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.7</version>
</dependency>
配置
package com.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
Docket docket=new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
//.title("swagger-bootstrap-ui-demo RESTful APIs")
.description("# swagger-bootstrap-ui-demo RESTful APIs")
.termsOfServiceUrl("http://www.xx.com/")
.contact("xx@qq.com")
.version("1.0")
.build())
//分组名称
.groupName("2.X版本")
.select()
//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.demo.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
}
加入拦截器
package com.demo.config;
import com.demo.service.impl.AdminInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class web implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
/** 配置knife4j 显示文档 */
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
/**
* 配置swagger-ui显示文档
*/
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
/** 公共部分内容 */
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*","null")
.allowedMethods("POST", "GET","PUT", "DELETE");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//1.得到自定义的拦截器
InterceptorRegistration interceptor = registry.addInterceptor(new AdminInterceptor());
//2.需要拦截的路径 /**所有资源都拦截
interceptor.addPathPatterns("/**");
//3.设置不拦截的路径 (登录页需要的和静态资源)
interceptor.excludePathPatterns(
"/",
"/static/index.html",
"/static/css/**",
"/static/img/**",
"/static/js/**",
"/static/qfile/**",
"/static/ffmpeg/**",
"/static/file/**",
"/static/*/*/*.mp4",
"/static/*/*/*.m3u8",
"/static/**",
"/video/test",
"/video/select",
"/video/uploadfilevideo",
"/video/uploadfilevideosrc",
"/video/uploadfile",
"/error",
"//login**"
);
}
}
package com.demo.service.impl;
import java.io.IOException;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import com.demo.dao.UserDao;
import com.demo.entity.ResultVo;
import com.demo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
*
*
* @Package: com.*.*.interceptor
* @ClassName: AdminInterceptor
* @Description:拦截器
* @author: zk
* @date: 2019年9月19日 下午2:20:57
*/
public class AdminInterceptor implements HandlerInterceptor {
// 不验证URL anon:不验证/authc:受控制的
private static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)).*";
// @Autowired
// private UserDao userDao;
/**
* 在请求处理之前进行调用(Controller方法调用之前)
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// System.out.println("执行了TestInterceptor的preHandle方法");
response.setContentType("text/html;charset=UTF-8");
// try {
// //统一拦截(查询当前session是否存在user)(这里user会在每次登陆成功后,写入session)
// String url = request.getRequestURI();
// System.out.println(url+"接口");
// String path = request.getServletPath();
// if ("/api/user/logins".equals(url)||
// "/api/user/register".equals(url)||
// path.matches(NO_INTERCEPTOR_PATH)){
// return true;
// }
// String token = request.getHeader("token");
// if (token==null){
// response.getWriter().write("token为空!重新登录!");
response.sendRedirect(request.getContextPath()+"/login");
// return false;
// }
// User user=(User)request.getSession().getAttribute(token);
// if(user==null){
// response.getWriter().write("用户信息为空,重新登录");
// return false;
// }
// response.sendRedirect(request.getContextPath()+"你的登陆页地址");
// } catch (IOException e) {
// e.printStackTrace();
// }
return true;//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
//如果设置为true时,请求将会继续执行后面的操作
}
/**
* 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// System.out.println("执行了TestInterceptor的postHandle方法");
}
/**
* 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// System.out.println("执行了TestInterceptor的afterCompletion方法");
}
}
配置完启动
http://localhost:4567/doc.html