配置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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐