别看了,走吧,代码写到最后发现不能解决
不想浪费大家时间!
谢谢大家!
安全第一,预防为主 -----格言警句
1.事情由来
我通过springBoot写了一个网站,不涉及复杂加密(token认证等)。这样如果有那种不怀好意的程序员,知道你的接口了,就可以直接调用接口删除你的用户,或者添加你的用户。这样对你来说,是不是很危险。
我的想法是,通过阿里云安全组设置指定的ip地址能够访问此端口,来避免用户直接请求服务端。而这样,只有前后端分离才可实现。如下图所示(流程图)
2.操作实例
2.1在阿里云上开通安全组
解释:
红色的为8088端口,授权对象为0.0.0.0/0,他的意思是允许任何ip访问
绿色的为8089端口,授权对象为服务端的特定ip,他的意思是只允许特定ip访问(我的前端服务就部署在这个特定的ip上)
2.2创建springBoot【前端】项目
(1) 设置配置文件:端口为8088
(2) 在static下创建个index.html内容如下
注意其中 :xmlhttp.open("GET","http://你的服务端ip:8089/hello",true);改成自己服务端的ip
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert("请求成功,结果为"+xmlhttp.responseText);
}
if(xmlhttp.readyState==4 && xmlhttp.status!=200){//因为状态码为4的时候才代表响应已完成,此时不为200代表有问题,200代表访问正常
alert("请求失败,错误状态码为"+xmlhttp.status);
}
}
xmlhttp.open("GET","http://你的服务端ip:8089/hello",true);//hello是后面服务端写的接口名
xmlhttp.send();
}
</script>
</head>
<body>
<button onclick="loadXMLDoc()">点我,向服务端发送数据!</button>
</body>
</html>
2.3创建springBoot【后端】项目
(1) 修改端口号为8089
(2)在DemoApplication类中添加如下内容
2.4部署
将2个项目打成jar包,上传至服务端,进行运行
3. 测试
假设:1.通过ip地址直接访问接口,如果【能够返回】,那么代表失败
2.通过访问前端,如果在调用结果,如果【不能返回】,则代表失败
两种情况都没失败,代表成功。
1.第一种情况通过
2.第二种情况失败
查看日志发现,还是由浏览器请求的这个端口,而不是服务器请求的这个端口。
那这就相当于浏览器转发,没有意义。
于是我就有了个新想法,那如果用户请求前端,我让前端在去请求自己的服务端,再由前端的服务端去请求另一个服务端呢。
大致流程如下图:
那这样,用户通过post请求调用这个接口,还不是可以做到了吗。所以说暂时没有找到好的方法