@Override
public Map<String, Object> findByCondition(Map<String, Object> map,
Page page, String path) {
Map<String,Object> mapResult = new HashMap<String,Object>();//存放查询结果
Map<String,Object> map2 = MapUtil.TransNullToStr(map);
long src_ip = IpUtils.ipStringToLong(map2.get("src_ip").toString().trim());
String src_port = map2.get("src_port").toString().trim();
long dst_ip = IpUtils.ipStringToLong(map2.get("dst_ip").toString().trim());
String dst_port = map2.get("dst_port").toString().trim();
String protocol = map2.get("protocol").toString().trim();
Query<WhiteListModel> q=whiteListDao.createQuery().order("-_id");
//构造查询条件
if(src_ip != 0)
{
q.criteria("src_ip").equal(src_ip);
}
if(!src_port.equals(""))
{
q.criteria("src_port").equal(src_port);
}
if(dst_ip != 0)
{
q.criteria("dst_ip").equal(dst_ip);
}
if(!dst_port.equals(""))
{
q.criteria("dst_port").equal(Integer.parseInt(dst_port));
}
if(!protocol.equals(""))
{
q.criteria("protocol").equal(protocol);
}
//限制查询的条数
q=q.limit(page.getPageSize()).offset((page.getCurrentPageNo()-1)*page.getPageSize());
如果输入一个具体的协议,比如telnet,如果直接去存放数据的conn_whitelist表里查找“protocol”
而conn_whitelist表中,protocol都是unknown的
解决办法:
去映射表protocol_map中,根据协议名,找到对应的port(即conn_whitelist表中的dst_port),再根据dst_port查询到对应的数据即可
if(!protocol.equals(""))
{
ProtocolMap protocolMap=new ProtocolMap();
protocolMap=protocolMapService.findOne("protocolName",protocol);//找到protocolName是protocol的条目,protocol是从前台传过来的要查询的protocol
if (protocolMap!=null)//在map中能找到
{
dst_port = protocolMap.getPort();//protocol对应的端口
q.criteria("dst_port").equal(Integer.parseInt(dst_port));
}
else{
q.criteria("protocol").equal(protocol);
}
这里用到了一些MongoDB的查询语句等,所以写这一小段,是学长给讲了两遍,然后死磕一天牺牲午饭换来的。。呜呜,现在好饿