SpringBoot+Vue前后端不分离,双向Https部署并实现数字证书登录
SpringBoot+Vue前后端不分离,双向Https部署并实现数字证书登录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录SpringBoot+Vue前后端不分离,双向Https部署并实现数字证书登录前言一、SpringBoot+Vue前后端不分离部署二、数字证书登录1.提供数字证书登录接口2. 配置Web应用以双向Https方式部署3.改造Vue登录页面总结前言上篇文
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拿到,调用接口就可以实现登录。
如有说的不对的地方,请多指教!
更多推荐
所有评论(0)