修改ip spoofing配置逻辑,删除spoofing ip pool配置菜单功能,在ip spoofing策略配置功能中,自动创建ip

pool配置,ip spoofing策略审核下发与取消审核时,同时审核下发或取消ip pool配置
This commit is contained in:
zhangwei
2018-12-27 21:00:23 +06:00
parent c46f0f5f43
commit 6b189ec768
9 changed files with 173 additions and 24 deletions

View File

@@ -52,6 +52,9 @@ public class PxyObjSpoofingIpPool extends BaseIpCfg{
this.ipAddress = ipAddress; this.ipAddress = ipAddress;
} }
public Integer getGroupId() { public Integer getGroupId() {
if(groupId==null || groupId==0){
groupId=cfgId.intValue();
}
return groupId; return groupId;
} }
public void setGroupId(Integer groupId) { public void setGroupId(Integer groupId) {

View File

@@ -26,6 +26,7 @@ import com.nis.domain.configuration.HttpUrlCfg;
import com.nis.domain.configuration.InterceptPktBin; import com.nis.domain.configuration.InterceptPktBin;
import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.PxyObjKeyring; import com.nis.domain.configuration.PxyObjKeyring;
import com.nis.domain.configuration.PxyObjSpoofingIpPool;
import com.nis.exceptions.MaatConvertException; import com.nis.exceptions.MaatConvertException;
import com.nis.util.Constants; import com.nis.util.Constants;
import com.nis.util.DictUtils; import com.nis.util.DictUtils;
@@ -60,9 +61,18 @@ public class InterceptController extends CommonController {
certificateList = pxyObjKeyringService.findPxyObjKeyrings(null, 1, 1, "domain"); certificateList = pxyObjKeyringService.findPxyObjKeyrings(null, 1, 1, "domain");
} }
model.addAttribute("certificateList", certificateList); model.addAttribute("certificateList", certificateList);
// IP地址仿冒策略使用策略组 /*if(cfg.getFunctionId().equals(214)){
List<PolicyGroupInfo> policyGroups = policyGroupInfoService.findPolicyGroupInfosByType(6); // IP地址仿冒策略使用策略组
model.addAttribute("policyGroups", policyGroups); //List<PolicyGroupInfo> policyGroups = policyGroupInfoService.findPolicyGroupInfosByType(6);
List<CfgIndexInfo> list = page.getList();
for(CfgIndexInfo c:list){
Long cfgId = Long.parseLong(c.getUserRegion2());//user_region2字段存储的为IP仿冒池的ID信息(策略组ID
PxyObjSpoofingIpPool pool = pxyObjSpoofingIpPoolService.getPxyObjSpoofingIpPool(cfgId);
c.setUserRegion2(pool.getGroupName());//将IP仿冒池的策略组名重新赋给user_region2
}
// model.addAttribute("policyGroups", policyGroups);
}*/
return "/cfg/intercept/interceptList"; return "/cfg/intercept/interceptList";
} }
@@ -86,8 +96,9 @@ public class InterceptController extends CommonController {
model.addAttribute("_cfg", entity); model.addAttribute("_cfg", entity);
// IP地址仿冒策略使用策略组 // IP地址仿冒策略使用策略组
List<PolicyGroupInfo> policyGroups = policyGroupInfoService.findPolicyGroupInfosByType(6); // List<PolicyGroupInfo> policyGroups = policyGroupInfoService.findPolicyGroupInfosByType(6);
model.addAttribute("policyGroups", policyGroups); // List<PxyObjSpoofingIpPool> pools = pxyObjSpoofingIpPoolService.findPxyObjSpoofingIpPools(new PxyObjSpoofingIpPool());
// model.addAttribute("policyGroups", pools);
return "/cfg/intercept/interceptForm"; return "/cfg/intercept/interceptForm";
} }

View File

@@ -89,7 +89,7 @@ public class PxyObjSpoofingIpPoolController extends BaseController {
model.addAttribute("isAdd", true); model.addAttribute("isAdd", true);
} }
List<PolicyGroupInfo> groups=policyGroupInfoService.findPolicyGroupInfosByType(6); /*List<PolicyGroupInfo> groups=policyGroupInfoService.findPolicyGroupInfosByType(6);
List<PolicyGroupInfo> policyGroups = new ArrayList(); List<PolicyGroupInfo> policyGroups = new ArrayList();
//解决目前一个分组只能有一个生效IP //解决目前一个分组只能有一个生效IP
for(PolicyGroupInfo group:groups){ for(PolicyGroupInfo group:groups){
@@ -101,7 +101,7 @@ public class PxyObjSpoofingIpPoolController extends BaseController {
policyGroups.add(group); policyGroups.add(group);
} }
} }
model.addAttribute("policyGroups", policyGroups); model.addAttribute("policyGroups", policyGroups);*/
model.addAttribute("_cfg", cfg); model.addAttribute("_cfg", cfg);
return "/cfg/proxy/spoofingIpPool/form"; return "/cfg/proxy/spoofingIpPool/form";
} }

View File

@@ -138,7 +138,7 @@
<select id="findList" resultMap="PxyObjSpoofingPoolMap" parameterType="com.nis.domain.configuration.PxyObjSpoofingIpPool"> <select id="findList" resultMap="PxyObjSpoofingPoolMap" parameterType="com.nis.domain.configuration.PxyObjSpoofingIpPool">
SELECT SELECT
<include refid="PxyObjSpoofingIpPoolColumns"/> <include refid="PxyObjSpoofingIpPoolColumns"/>
FROM pxy_obj_spoofing_ip_pool r where (r.is_valid!=-1 and r.is_audit!=3) AND r.group_id =#{groupId,jdbcType=INTEGER} FROM pxy_obj_spoofing_ip_pool r where r.is_valid=1 and r.is_audit=1
<if test="cfgId != null"> <if test="cfgId != null">
AND r.CFG_ID!=#{cfgId,jdbcType=BIGINT} AND r.CFG_ID!=#{cfgId,jdbcType=BIGINT}
</if> </if>
@@ -146,7 +146,9 @@
<insert id="insert" parameterType="com.nis.domain.configuration.PxyObjSpoofingIpPool" > <insert id="insert" parameterType="com.nis.domain.configuration.PxyObjSpoofingIpPool" >
insert into pxy_obj_spoofing_ip_pool ( insert into pxy_obj_spoofing_ip_pool (
CFG_ID, <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="cfgId">
SELECT LAST_INSERT_ID()
</selectKey>
CFG_DESC, CFG_DESC,
ACTION, ACTION,
IS_VALID, IS_VALID,
@@ -176,7 +178,6 @@
user_region, user_region,
port port
)values ( )values (
#{cfgId,jdbcType=VARCHAR},
#{cfgDesc,jdbcType=VARCHAR}, #{cfgDesc,jdbcType=VARCHAR},
#{action,jdbcType=INTEGER}, #{action,jdbcType=INTEGER},
0, 0,

View File

@@ -18,6 +18,7 @@ import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.HttpUrlCfg; import com.nis.domain.configuration.HttpUrlCfg;
import com.nis.domain.configuration.InterceptPktBin; import com.nis.domain.configuration.InterceptPktBin;
import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.PxyObjSpoofingIpPool;
import com.nis.domain.maat.MaatCfg; import com.nis.domain.maat.MaatCfg;
import com.nis.domain.maat.MaatCfg.NumBoundaryCfg; import com.nis.domain.maat.MaatCfg.NumBoundaryCfg;
import com.nis.domain.maat.ToMaatBean; import com.nis.domain.maat.ToMaatBean;
@@ -33,6 +34,7 @@ import com.nis.util.Constants;
import com.nis.util.StringUtil; import com.nis.util.StringUtil;
import com.nis.web.dao.configuration.AreaIpCfgDao; import com.nis.web.dao.configuration.AreaIpCfgDao;
import com.nis.web.dao.configuration.InterceptCfgDao; import com.nis.web.dao.configuration.InterceptCfgDao;
import com.nis.web.dao.configuration.PxyObjSpoofingIpPoolDao;
import com.nis.web.dao.configuration.WebsiteCfgDao; import com.nis.web.dao.configuration.WebsiteCfgDao;
import com.nis.web.security.UserUtils; import com.nis.web.security.UserUtils;
import com.nis.web.service.BaseService; import com.nis.web.service.BaseService;
@@ -51,6 +53,8 @@ public class InterceptCfgService extends CrudService<WebsiteCfgDao,CfgIndexInfo>
protected InterceptCfgDao interceptCfgDao; protected InterceptCfgDao interceptCfgDao;
@Autowired @Autowired
protected AreaIpCfgDao areaIpCfgDao; protected AreaIpCfgDao areaIpCfgDao;
@Autowired
protected PxyObjSpoofingIpPoolDao pxyObjSpoofingIpPoolDao;
public CfgIndexInfo getInterceptCfg(Long cfgId,Integer compileId){ public CfgIndexInfo getInterceptCfg(Long cfgId,Integer compileId){
CfgIndexInfo entity = websiteCfgDao.getCfgIndexInfo(cfgId,compileId); CfgIndexInfo entity = websiteCfgDao.getCfgIndexInfo(cfgId,compileId);
@@ -107,20 +111,57 @@ public class InterceptCfgService extends CrudService<WebsiteCfgDao,CfgIndexInfo>
setAreaEffectiveIds(entity); setAreaEffectiveIds(entity);
if(entity.getCfgId()==null){ if(entity.getCfgId()==null){
Integer compileId = 0; Integer compileId = 0;
Integer spoofingPoolId = 0 ;
try { try {
List<Integer> idList = ConfigServiceUtil.getId(1, 1); List<Integer> idList = new ArrayList();
if(idList!=null && idList.size()>0){ if(entity.getServiceId().equals(518)){//ip仿冒策略
idList= ConfigServiceUtil.getId(1, 2);
compileId = idList.get(0); compileId = idList.get(0);
} spoofingPoolId = idList.get(1);
}else{
idList= ConfigServiceUtil.getId(1, 1);
compileId = idList.get(0);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("获取编译ID出错"); logger.info("获取编译ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+e.getMessage()); throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
} }
if(entity.getServiceId().equals(518)){//ip仿冒策略
//保存IP仿冒池
PxyObjSpoofingIpPool spoofingPool = new PxyObjSpoofingIpPool();
spoofingPool.setIpType(4);//ipv4
spoofingPool.setIpAddress(entity.getUserRegion2());//仿冒IP
spoofingPool.setProtocol(0);
if("dnat".equals(entity.getUserRegion1().toLowerCase())){//spoofing server ip->dnat
spoofingPool.setDirection(1);
}else{
spoofingPool.setDirection(2);//spoofing client ip->snat
}
spoofingPool.setPort("0");
spoofingPool.setUserRegion("0");
spoofingPool.setLocation(0);
spoofingPool.setServiceId(642);
spoofingPool.setAreaEffectiveIds("0");
spoofingPool.setIsAreaEffective(0);
spoofingPool.setCreateTime(new Date());
spoofingPool.setCreatorId(UserUtils.getUser().getId());
spoofingPool.setCompileId(spoofingPoolId);
spoofingPool.setAction(1);
spoofingPool.setFunctionId(666);
spoofingPool.setRequestId(0);
pxyObjSpoofingIpPoolDao.insert(spoofingPool);//保存仿冒IP池配置
entity.setUserRegion3(String.valueOf(spoofingPool.getCfgId()));//将仿冒IP池配置ID作为策略组ID
}
entity.setCompileId(compileId); entity.setCompileId(compileId);
entity.setCreateTime(new Date()); entity.setCreateTime(new Date());
entity.setCreatorId(entity.getCurrentUser().getId()); entity.setCreatorId(entity.getCurrentUser().getId());
websiteCfgDao.saveCfgIndex(entity); websiteCfgDao.saveCfgIndex(entity);
if(entity.getIpPortList()!=null){ if(entity.getIpPortList()!=null){
for(IpPortCfg cfg:entity.getIpPortList()){ for(IpPortCfg cfg:entity.getIpPortList()){
BeanUtils.copyProperties(entity, cfg,new String[]{"cfgRegionCode","cfgType"}); BeanUtils.copyProperties(entity, cfg,new String[]{"cfgRegionCode","cfgType"});
@@ -155,6 +196,30 @@ public class InterceptCfgService extends CrudService<WebsiteCfgDao,CfgIndexInfo>
}else{ }else{
if(entity.getServiceId().equals(518)){//ip仿冒策略
//保存IP仿冒池
Long cfgId = Long.parseLong(entity.getUserRegion3());
PxyObjSpoofingIpPool spoofingPool = pxyObjSpoofingIpPoolDao.getPxyObjSpoofingIpPool(cfgId);
spoofingPool.setIpType(4);//ipv4
spoofingPool.setIpAddress(entity.getUserRegion2());//仿冒IP
spoofingPool.setProtocol(0);
if("dnat".equals(entity.getUserRegion1())){//spoofing server ip->dnat
spoofingPool.setDirection(1);
}else{
spoofingPool.setDirection(2);//spoofing client ip->snat
}
spoofingPool.setPort("0");
spoofingPool.setUserRegion("0");
spoofingPool.setLocation(0);
spoofingPool.setServiceId(642);
spoofingPool.setAreaEffectiveIds("0");
spoofingPool.setIsAreaEffective(0);
spoofingPool.setEditTime(new Date());
spoofingPool.setEditorId(UserUtils.getUser().getId());
pxyObjSpoofingIpPoolDao.update(spoofingPool);//保存仿冒IP池配置
}
entity.setEditTime(new Date()); entity.setEditTime(new Date());
entity.setEditorId(entity.getCurrentUser().getId()); entity.setEditorId(entity.getCurrentUser().getId());
@@ -220,6 +285,20 @@ public class InterceptCfgService extends CrudService<WebsiteCfgDao,CfgIndexInfo>
websiteCfgDao.updateCfgValid(entity); websiteCfgDao.updateCfgValid(entity);
//查询子配置 //查询子配置
entity = this.getInterceptCfg(Long.parseLong(id),entity.getCompileId()); entity = this.getInterceptCfg(Long.parseLong(id),entity.getCompileId());
//IP仿冒策略下的仿冒IP池也失效
if(entity.getServiceId().equals(518)){
PxyObjSpoofingIpPool pool = new PxyObjSpoofingIpPool();
if(StringUtils.isNotEmpty(entity.getUserRegion3())){
pool.setCfgId(Long.parseLong(entity.getUserRegion3()));
pool.setIsValid(isValid);
pool.setIsAudit(entity.getIsAudit());
pool.setEditTime(new Date());
pool.setEditorId(UserUtils.getUser().getId());
pxyObjSpoofingIpPoolDao.update(pool);
}
}
if(entity.getIpPortList()!=null && entity.getIpPortList().size()>0){ if(entity.getIpPortList()!=null && entity.getIpPortList().size()>0){
IpPortCfg cfg = new IpPortCfg(); IpPortCfg cfg = new IpPortCfg();
BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"}); BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"});
@@ -274,6 +353,56 @@ public class InterceptCfgService extends CrudService<WebsiteCfgDao,CfgIndexInfo>
//查询子配置并修改审核状态 //查询子配置并修改审核状态
entity = this.getInterceptCfg(entity.getCfgId(),entity.getCompileId()); entity = this.getInterceptCfg(entity.getCfgId(),entity.getCompileId());
if(entity.getServiceId().equals(518)){//IP仿冒策略
//仿冒IP池配置匹配下发或者取消
PxyObjSpoofingIpPool pool=new PxyObjSpoofingIpPool();
pool.setCfgId(Long.valueOf(entity.getUserRegion3()));
pool.setIsValid(entity.getIsValid());
pool.setIsAudit(isAudit);
pool.setAuditorId(UserUtils.getUser().getId());
pool.setAuditTime(new Date());
pxyObjSpoofingIpPoolDao.update(pool);
pool = pxyObjSpoofingIpPoolDao.getPxyObjSpoofingIpPool(pool.getCfgId());
List<PxyObjSpoofingIpPool> list = new ArrayList<PxyObjSpoofingIpPool>();
String json="";
String areaEffectiveIds="0";
if(entity.getIsAudit()==1){
pool.setAreaEffectiveIds(areaEffectiveIds);
pool.setGroupId(pool.getCfgId().intValue());//界面端的配置ID作为策略分组ID
list.add(pool);
//调用服务接口下发配置数据
json=gsonToJson(list);
logger.info("欺骗IP池配置下发配置参数"+json);
//调用服务接口下发配置
try {
ToMaatResult result = ConfigServiceUtil.postCallbackCfg(json);
if(result!=null){
logger.info("欺骗IP池配置下发响应信息"+result.getMsg());
}
} catch (Exception e) {
logger.error("欺骗IP池配置配置下发失败",e);
throw e;
}
}else if(entity.getIsAudit()==3){
PxyObjSpoofingIpPool cfg = new PxyObjSpoofingIpPool();
cfg.setIsValid(0);
cfg.setCompileId(pool.getCompileId());
cfg.setServiceId(pool.getServiceId());
list.add(cfg);
//调用服务接口取消配置
json=gsonToJson(list);
logger.info("欺骗IP池配置配置参数"+json);
//调用服务接口取消配置
try {
ToMaatResult result = ConfigServiceUtil.put(json, 2);
logger.info("欺骗IP池配置响应信息"+result.getMsg());
} catch (Exception e) {
e.printStackTrace();
logger.info("欺骗IP池配置配置失败");
throw e;
}
}
}
if(entity.getIpPortList()!=null && entity.getIpPortList().size()>0){ if(entity.getIpPortList()!=null && entity.getIpPortList().size()>0){
IpPortCfg cfg = new IpPortCfg(); IpPortCfg cfg = new IpPortCfg();
BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"}); BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"});
@@ -398,7 +527,7 @@ public class InterceptCfgService extends CrudService<WebsiteCfgDao,CfgIndexInfo>
if(entity.getAction().equals(48)){ if(entity.getAction().equals(48)){
//HTTP replace replace type is not null ;find is not null;replace with is not null(userRegion is not null) //HTTP replace replace type is not null ;find is not null;replace with is not null(userRegion is not null)
userRegion="nat_type="+entity.getUserRegion1(); userRegion="nat_type="+entity.getUserRegion1();
userRegion+=";spoofing_ip_pool="+entity.getUserRegion2(); userRegion+=";spoofing_ip_pool="+entity.getUserRegion3();
maatCfg.setUserRegion(userRegion); maatCfg.setUserRegion(userRegion);
} }

View File

@@ -165,6 +165,7 @@ public class PxyObjSpoofingIpPoolService extends BaseService{
areaEffectiveIds = this.setEffectiveRange(entity.getAreaEffectiveIds()); areaEffectiveIds = this.setEffectiveRange(entity.getAreaEffectiveIds());
} }
entity.setAreaEffectiveIds(areaEffectiveIds); entity.setAreaEffectiveIds(areaEffectiveIds);
entity.setGroupId(entity.getCfgId().intValue());//界面的配置ID作为策略分组ID
list.add(entity); list.add(entity);
//调用服务接口下发配置数据 //调用服务接口下发配置数据
json=gsonToJson(list); json=gsonToJson(list);

View File

@@ -696,7 +696,7 @@
<div class="col-md-6"> <div class="col-md-6">
<div class="form-group"> <div class="form-group">
<label class="control-label col-md-3"><font color="red">*</font> <label class="control-label col-md-3"><font color="red">*</font>
<spring:message code="Spoofing" /> <spring:message code="spoofing" />
</label> </label>
<div class="col-md-6"> <div class="col-md-6">
<select name="userRegion1" <select name="userRegion1"
@@ -714,12 +714,14 @@
<label class="control-label col-md-3"><font color="red">*</font> <label class="control-label col-md-3"><font color="red">*</font>
<spring:message code="With" /></label> <spring:message code="With" /></label>
<div class="col-md-6"> <div class="col-md-6">
<select name="userRegion2" class="selectpicker show-tick form-control required"> <input class="form-control required ip" type="text" name="userRegion2" value="${_cfg.userRegion2}">
<input class="form-control" type="hidden" name="userRegion3" value="${_cfg.userRegion3}">
<%-- <select name="userRegion2" class="selectpicker show-tick form-control required">
<option value="" ><spring:message code="select"/></option> <option value="" ><spring:message code="select"/></option>
<c:forEach items="${policyGroups }" var="policyGroup"> <c:forEach items="${policyGroups }" var="policyGroup">
<option value="${policyGroup.groupId}" <c:if test="${_cfg.userRegion2==policyGroup.groupId }">selected</c:if>><spring:message code="${policyGroup.groupName}"/></option> <option value="${policyGroup.cfgId}" <c:if test="${_cfg.userRegion2==policyGroup.cfgId }">selected</c:if>><spring:message code="${policyGroup.groupName}"/></option>
</c:forEach> </c:forEach>
</select> </select> --%>
</div> </div>
<div for="userRegion2"></div> <div for="userRegion2"></div>
</div> </div>

View File

@@ -397,7 +397,7 @@
<th column="userregion3" ><spring:message code="replace_content"/></th> <th column="userregion3" ><spring:message code="replace_content"/></th>
</c:if> </c:if>
<c:if test="${cfg.functionId eq 214 }"> <c:if test="${cfg.functionId eq 214 }">
<th column="userregion1" ><spring:message code="Spoofing"/></th> <th column="userregion1" ><spring:message code="spoofing"/></th>
<th column="userregion2" ><spring:message code="With"/></th> <th column="userregion2" ><spring:message code="With"/></th>
</c:if> </c:if>
<c:if test="${cfg.functionId eq 201 }"> <c:if test="${cfg.functionId eq 201 }">
@@ -437,7 +437,7 @@
<spring:message code="bypass"/> <spring:message code="bypass"/>
</c:if> </c:if>
<c:if test="${indexCfg.action eq 48}"> <c:if test="${indexCfg.action eq 48}">
<spring:message code="Spoofing"/> <spring:message code="spoofing"/>
</c:if> </c:if>
<c:if test="${(indexCfg.action ne 1) && (indexCfg.action ne 128) && (indexCfg.action ne 48)}"> <c:if test="${(indexCfg.action ne 1) && (indexCfg.action ne 128) && (indexCfg.action ne 48)}">
<c:forEach items="${fns:getDictList('SERVICE_ACTION') }" var="dict"> <c:forEach items="${fns:getDictList('SERVICE_ACTION') }" var="dict">
@@ -511,11 +511,12 @@
</c:forEach> </c:forEach>
</td> </td>
<td> <td>
<c:forEach items="${policyGroups}" var="policyGroup"> ${indexCfg.userRegion2 }
<%-- <c:forEach items="${policyGroups}" var="policyGroup">
<c:if test="${indexCfg.userRegion2==policyGroup.groupId}"> <c:if test="${indexCfg.userRegion2==policyGroup.groupId}">
${policyGroup.groupName } ${policyGroup.groupName }
</c:if> </c:if>
</c:forEach> </c:forEach> --%>
</td> </td>
</c:if> </c:if>
<c:if test="${cfg.functionId eq 201 }"> <c:if test="${cfg.functionId eq 201 }">

View File

@@ -89,11 +89,12 @@ $(function(){
<div class="form-group"> <div class="form-group">
<label class="control-label col-md-3"><font color="red">*</font><spring:message code="group"/></label> <label class="control-label col-md-3"><font color="red">*</font><spring:message code="group"/></label>
<div class="col-md-6"> <div class="col-md-6">
<select name="groupId" id="group" class="selectpicker show-tick form-control required"> <input class="form-control required" type="text" name="groupName" value="${_cfg.groupName}">
<%-- <select name="groupId" id="group" class="selectpicker show-tick form-control required">
<c:forEach items="${policyGroups }" var="policyGroup"> <c:forEach items="${policyGroups }" var="policyGroup">
<option value="${policyGroup.groupId}" groupType="${policyGroup.asnNo }" <c:if test="${_cfg.groupId==policyGroup.groupId }">selected</c:if>><spring:message code="${policyGroup.groupName}"/></option> <option value="${policyGroup.groupId}" groupType="${policyGroup.asnNo }" <c:if test="${_cfg.groupId==policyGroup.groupId }">selected</c:if>><spring:message code="${policyGroup.groupName}"/></option>
</c:forEach> </c:forEach>
</select> </select> --%>
</div> </div>
<div for="groupId"></div> <div for="groupId"></div>
</div> </div>