2017-01-12 74 views
1

是否可以将不同的ip过滤器应用于不同的路由?特定路由的Express IP过滤器?

例如,我想从123.123.123.123只有人可以访问我的服务器的/test路线,并从124.124.124.124只有人可以访问我的服务器的/路线。

我知道express-ipfilter可以通过IP地址限制站点访问。但它不能将过滤器应用于特定路线。

我也知道,在路线中间增加app.use(ipfilter(ips, {}));可以应用过滤器只以下路线:

var express = require('express'), 
    ipfilter = require('express-ipfilter').IpFilter; 

var ips = ['::ffff:127.0.0.1']; 
var app = express(); 

app.get('/test', function(req, res) { 
    res.send('test'); 
}); 

app.use(ipfilter(ips, {})); // the ipfilter only applies to the routes below 

app.get('/', function(req, res) { 
    res.send('Hello World'); 
}); 

app.listen(3000); 

但我要为不同的路线不同的过滤器。

可以做到这一点吗?

回答

-1

是的,这是可能的。你可以这样做:

app.get('/test', function(req, res){ 
    var trustedIps = ['123.123.123.123']; 
    var requestIP = req.connection.remoteAddress; 
    if(trustedIps.indexOf(requestIP) >= 0) { 
     // do stuff 
    } else { 
     // handle unallowed ip 
    } 
}) 

您可能需要确保requestIP的格式是否正确,但。

+2

+1如果你需要实现它在几个甚至可以写出一个干净实现中间件功能路线。 –

0

在你的主文件,其中u定义的应用程序,

app.use('/test',require('./whereever-my-route-is-located-where /test routes ')); 
app.use('/',require('./wherever-my-this-routes-are-located')) 

在你的路由文件。

var express = require('express'), 
    router = express.Router(); 
//Ip verification for all requests : for whereever-my-route-is-located-where /test routes 
router.use(function(req, res, next) { 
    //verify Ip Logic 
}); 
//this will be called for every route u define in that file, if it fails. 
2

你可以链接中间件(而ipFilter是一个中间件)。有2种方式来做到这一点:

var express = require('express'), 
    ipfilter = require('express-ipfilter').IpFilter; 

var ips = ['::ffff:127.0.0.1']; 
var testers = ['1.2.3.4']; 
var app = express(); 

app.get('/test', ipfilter(testers, {mode: 'allow'}), function(req, res) { 
    res.send('test'); 
}); 


// the ipfilter only applies to the routes below 
app.get('/', ipfilter(ips, {mode: 'allow'}), function(req, res) { 
    res.send('Hello World'); 
}); 

app.listen(3000); 

或限定使用中间件:

var express = require('express'), 
    ipfilter = require('express-ipfilter').IpFilter; 

var ips = ['::ffff:127.0.0.1']; 
var testers = ['1.2.3.4']; 
var app = express(); 

app.use('/test', ipfilter(testers, {})); // the ipfilter only applies to the routes below  

app.get('/test', function(req, res) { 
    res.send('test'); 
}); 

app.use('/', ipfilter(ips, {})); // the ipfilter only applies to the routes below 

app.get('/', function(req, res) { 
    res.send('Hello World'); 
}); 

app.listen(3000);