SpringBoot+Vue前后端不分离,双向Https部署并实现数字证书登录


前言

上篇文章介绍了,前后端分离架构下如何实现数字证书登录。应公司要求,还要支持前后端不分离模式下,实现数字证书登录。文章不对如何生成和配置数字证书做说明。


提示:内容仅供参考

一、SpringBoot+Vue前后端不分离部署

在这里插入图片描述

将打包好的Vue静态资源放入SpringBoot下resource/static/文件夹内,如果resource下没有static文件夹请创建。
因每个项目不同,因此对于静态资源过滤不一样,这里简单说一下,如果发现访问Vue的静态资源失败,请修改SpringBoot配置,不对静态资源进行拦截,这里不做详细讲解。

二、数字证书登录

1.提供数字证书登录接口

代码如下:

    /***
    * 数字证书登录接口
    */
    public String login(HttpServletRequest request) throws Exception {
        // 用户信息DN值
        String DN = "";
        // 使用X509解析数字证书信息并获取用户信息DN值
        X509Certificate[] certs = (X509Certificate[])
                    request.getAttribute(REQUEST_X509_CERTIFICATE);
                // 从数字证书中获取DN值
        DN = certs[X509_INDEX].getSubjectDN().toString();
        // 有了用户信息DN值,可以自己实现登录功能
       ......
    }

2. 配置Web应用以双向Https方式部署

修改application.properties配置文件即可,如下:

# keyStore密钥库,存放了服务端证书的私钥、公钥和证书
#是否开启ssl,默认: true
server.ssl.enabled=true
# 设定持有SSL certificate的key store的路径,通常是一个.jks文件
server.ssl.key-store=classpath:server.p12
# 设定访问key store的密码
server.ssl.key-store-password=123456
# 设定key store的类型
server.ssl.key-store-type=PKCS12
# 设定key store中key的别名
#server.ssl.key-alias=server

# 双向SSL协议下,对于客户端的配置,此处配置只在客户端需要验证时进行配置
# trustStore信任库,存放了服务端信任的客户端证书的公钥文件
# 持有SSL certificates的Trust store
server.ssl.trust-store=classpath:server.p12
# 访问trust store的密码
server.ssl.trust-store-password=123456
# 指定trust store的类
server.ssl.trust-store-type=JKS
# 设定trust store的提供者
server.ssl.trust-store-provider=SUN

# 设定client authentication是wanted 还是 needed
# 此处是关键,只有设置了该属性值为need,代表服务端需要对客户端进行认证,才算开启双向https,否则为单向https
server.ssl.client-auth=need

3.改造Vue登录页面

对于Vue的改造,只需在加载登录页面时调用证书登录接口即可,浏览器会弹出数字证书,选择证书后认证成功即可调用数字证书登录接口,并将证书信息传递进去。

总结

对于SpringBoot+Vue前后端不分离部署方式来说实现数字证书登录比较简单。首先,增加数字证书登录接口,此接口中使用X509解析数字证书。其次,改造登录页面,使其调用证书登录接口。最后,配置SpringBoot应用为双向Https。
经过本篇文章和上篇文章的介绍,主路数字证书登录方式基本已经介绍完了。
既然后主路,那就会有旁路,旁路认证每个公司可能情况不同,像我们公司有自己的网关,集成网关后很容易就将用户信息DN拿到,调用接口就可以实现登录。

如有说的不对的地方,请多指教!

Logo

前往低代码交流专区

更多推荐