springboot 整合 swagger2 配置账号密码登录 demo代码
一、pom文件引入swagger依赖<!-- swagger2-restful接口测试 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</versio
·
配置spring security登录可参考: springboot整合spring security安全框架-简单验证账号密码
一、pom文件引入swagger依赖
<!-- swagger2-restful接口测试 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
二、配置文件application.yml配置参数
#swagger-doc
swagger:
# requestHander 的包路径
package: com.xzty.controller
title: project API
description: project API
version: 1.0
#登录的账户密码
username: admin
password: admin
三、swagger 配置类
/**
* @author 闲走天涯
* @version V1.0
* @Title: Swagger2
* @Description: 暴露restful-API
* @date 2021-08-05
*/
@Configuration
public class Swagger2 {
//可以获取application.yml 配置的参数
@Autowired
public Environment env;
@Bean
public Docket api() {
//添加head参数start
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
//这里配置 访问jwt令牌请求头,不需要的不加
//pars.add(new ParameterBuilder().name("authorization").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build());
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.globalOperationParameters(pars)
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
ApiInfoBuilder ab = new ApiInfoBuilder();
ab.title(env.getProperty("swagger.title"));
ab.description(env.getProperty("swagger.description"));
ab.version(env.getProperty("swagger.version"));
return ab.build();
}
}
四、配置登录过滤器
/**
* @author 闲走天涯
* @version V1.0
* @Title: Swagger2
* @Description: 登录过滤器
* @date 2021-08-05
*/
@Component
public class SwaggerFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String requestURI = req.getRequestURI();
//swagger-security
if (requestURI.contains("swagger-ui")) {
//获取session
HttpSession session = req.getSession();
//判断swagger是否已经登录
Object swaggerLogin = session.getAttribute("swaggerLogin");
if (swaggerLogin == null || StringUtils.isEmpty(swaggerLogin.toString()) || !Boolean.parseBoolean(swaggerLogin.toString())) {
String basePath = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath() + "/";
String fullPath = basePath + "swagger/toLogin";
//重定向登录页面
res.sendRedirect(fullPath);
}
}
//doFilter
chain.doFilter(req, res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
五、swagger 登录控制层-登录接口
/**
* @author 闲走天涯
* @version V1.0
* @Title: Swagger2
* @Description: swagger 登录控制层-登录接口
* @date 2021-08-05
*/
@Controller
@RequestMapping(value = "swagger")
public class SwaggerController {
@Value("${swagger.username}")
private String sysUserName;
@Value("${swagger.password}")
private String sysPassword;
@GetMapping(value = {"toLogin", ""})
public String toLogin(HttpServletRequest request) {
Object swaggerLogin = request.getSession().getAttribute("swaggerLogin");
if (swaggerLogin != null && StringUtils.isNotBlank(swaggerLogin.toString()) && Boolean.parseBoolean(swaggerLogin.toString())) {
return "redirect:/swagger-ui.html";
}
return "swaggerLogin";
}
@PostMapping(value = "login")
@ResponseBody
public JsonBean<Boolean> login(String userName, String password, HttpServletRequest request) {
if (StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(password) && sysUserName.equals(userName) && sysPassword.equals(password)) {
request.getSession().setAttribute("swaggerLogin", true);
return new JsonBean<Boolean>(true, "ok", 1, true);
}
return new JsonBean<Boolean>(false, "fail", 0, false);
}
}
六、登录页面 swaggerLogin.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>登陆</title>
<style>
.login {
width: 100%;
height: 600px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
flex-flow: column;
}
.body > div {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.body > div > input {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="login">
<h2 class="title">欢迎使用SWAGGER</h2>
<div class="body">
<div>
<span>账号:</span>
<input type="text" id="userName">
</div>
<div>
<span>密码:</span>
<input type="password" id="password">
</div>
</div>
<button type="button" id="logBtn">登陆</button>
</div>
<script src="../js/jquery-2.0.2.min.js"></script>
<script>
$('#logBtn').click(function () {
let userName = $("#userName").val();
let password = $("#userName").val();
if (userName === '' && password === '') {
alert('账号密码不能为空');
return false;
}
$.ajax({
url: '/swagger/login',
data: {
userName: userName,
password: password
},
type: 'post',
dataType: 'json',
success: function (result) {
if (result.success) {
location.href = '/swagger-ui.html';
} else {
alert(result.msg);
}
}
});
});
</script>
</body>
</html>
测试访问:
http://127.0.0.1:8080/swagger/toLogin
http://127.0.0.1:8080/swagger
http://127.0.0.1:8080/swagger-ui.html
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)