VPN服务器

新增添加IP重复验证
删除验证是否被IP复用-用户管理使用
IP复用-用户管理 删除验证是否被snat策略和dnat策略使用
This commit is contained in:
leijun
2019-01-18 17:40:23 +08:00
parent b9c9b5aab9
commit 436190fe8c
10 changed files with 146 additions and 13 deletions

View File

@@ -24,6 +24,7 @@ import com.google.common.collect.Maps;
import com.nis.domain.Page;
import com.nis.domain.SysUser;
import com.nis.domain.basics.ServiceDictInfo;
import com.nis.domain.configuration.UserManage;
import com.nis.util.ConfigDictUtils;
import com.nis.util.Configurations;
import com.nis.util.Constants;
@@ -232,8 +233,36 @@ public class ServiceDictInfoController extends BaseController {
@RequestMapping(value={"delete"})
public String delete(ServiceDictInfo serviceDictInfo, RedirectAttributes redirectAttributes, String itType, String mulitId) {
try {
serviceDictInfoService.deleteDict(mulitId);
String exIp="";
String id="";
Properties msgProp = getMsgProp();
if(itType.equals("5")){
String [] ids=mulitId.split(",");
for (int i = 0; i < ids.length; i++) {
ServiceDictInfo dict= serviceDictInfoService.getDictById(Integer.valueOf(ids[i]));
if(dict!=null){
UserManage user =new UserManage();
user.setServerIp(dict.getItemValue()+",");
List<UserManage> list=userManageService.findList(user);
if(list!=null && list.size()>0){
exIp+=dict.getItemValue()+"";
}else{
id+=ids[i]+",";
}
}
}
}else{
id=mulitId;
}
if(!StringUtil.isEmpty(id)){
serviceDictInfoService.deleteDict(id);
}
if(!StringUtil.isEmpty(exIp)){
exIp=exIp.substring(0, exIp.length()-1);
addMessage(redirectAttributes,"error", "IP "+exIp+" "+msgProp.getProperty("user_check"));
}else{
addMessage(redirectAttributes,"success", "delete_success");
}
} catch (Exception e) {
e.printStackTrace();
addMessage(redirectAttributes,"error", "delete_failed");
@@ -593,4 +622,17 @@ public class ServiceDictInfoController extends BaseController {
return dicName;
}
@ResponseBody
@RequestMapping(value = "ajaxIpRepeat")
public boolean ajaxIpRepeat(String oldIp, String ip,Integer type) {
if (ip !=null && ip.equals(oldIp)) {
return true;
} else if (ip !=null && serviceDictInfoService.getByItemValue(ip,type) == null) {
return true;
}
return false;
}
}

View File

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.eclipse.jetty.util.ajax.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
@@ -23,10 +24,8 @@ import com.google.common.collect.Maps;
import com.nis.domain.Page;
import com.nis.domain.basics.IpReuseIpCfg;
import com.nis.domain.basics.ServiceDictInfo;
import com.nis.domain.configuration.BaseCfg;
import com.nis.domain.configuration.BaseStringCfg;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.IpReuseDnatPolicyCfg;
import com.nis.domain.configuration.IpReusePolicyCfg;
import com.nis.domain.configuration.UserManage;
import com.nis.exceptions.MaatConvertException;
import com.nis.util.Constants;
@@ -34,11 +33,15 @@ import com.nis.util.DateUtils;
import com.nis.util.StringUtil;
import com.nis.util.StringUtils;
import com.nis.web.controller.BaseController;
import com.nis.web.service.configuration.IpMultiplexService;
@Controller
@RequestMapping("${adminPath}/maintenance/userManage")
public class UserManageController extends BaseController{
@Autowired
private IpMultiplexService ipMultiplexService;
@RequestMapping(value = {"/list"})
@RequiresPermissions(value={"user:manage:view"})
public String list(Model model,HttpServletRequest request,HttpServletResponse response
@@ -69,13 +72,30 @@ public class UserManageController extends BaseController{
public String delete(Integer isValid
,String ids
,RedirectAttributes redirectAttributes,HttpServletRequest request){
String deleteSuccessIp="";
String message="";
Properties msgProp = getMsgProp();
String exUser="";
try{
for (String id : ids.split(",")) {
UserManage user=userManageService.getUserById(id);
if(user != null && !StringUtil.isEmpty(user.getServerIp())) {
//判断用户是否存在snat、dnat复用策略中
boolean flag=true;
if(user!=null && !StringUtil.isEmpty(user.getUserName())){
//snat
List<IpReusePolicyCfg> snatList=ipMultiplexService.findByUser(user.getUserName());
if(snatList!=null && snatList.size()>0){
exUser+=user.getUserName()+"";
flag=false;
}else{
//dnat
List<IpReuseDnatPolicyCfg> dnatList=ipMultiplexService.findDnatUser(user.getUserName());
if(dnatList!=null && dnatList.size()>0){
exUser+=user.getUserName()+"";
flag=false;
}
}
}
if(user != null && !StringUtil.isEmpty(user.getServerIp()) && flag) {
boolean lastIp=false;
int deleteIpLenth=1;
String serverIp=user.getServerIp().substring(0, user.getServerIp().length()-1);
@@ -99,9 +119,19 @@ public class UserManageController extends BaseController{
}
}
}
if(!StringUtil.isEmpty(exUser)){
exUser=exUser.substring(0, exUser.length()-1);
addMessage(redirectAttributes,"error", msgProp.getProperty("user")+" "+exUser+" "+msgProp.getProperty("user_check"));
}else{
addMessage(redirectAttributes,"success","delete_success");
}
}catch(Exception e){
logger.error("Delete failed",e);
if(!StringUtil.isEmpty(exUser)){
exUser=exUser.substring(0, exUser.length()-1);
message+="<br/> "+msgProp.getProperty("user")+" "+exUser+" "+msgProp.getProperty("user_check");
}
if(e instanceof MaatConvertException) {
addMessage(redirectAttributes,"error",message);
}else {

View File

@@ -48,4 +48,8 @@ public interface IpMultiplexDao extends CrudDao<IpMultiplexDao>{
List<IpReusePolicyCfg> findByPage(@Param("ids")String ids);
List<BaseIpCfg> findPageByDnat(@Param("ids")String ids);
List<IpReusePolicyCfg> findByUser(@Param("userName")String userName);
List<IpReuseDnatPolicyCfg> findDnatUser(@Param("userName")String userName);
}

View File

@@ -801,4 +801,22 @@
</select>
<select id="findByUser" resultMap="policyMap">
SELECT
<include refid="policyColumns"/>
FROM
ip_reuse_policy_cfg r
where r.IS_VALID != -1
and r.user_name =#{userName}
</select>
<select id="findDnatUser" resultMap="dnatPolicyMap">
SELECT
<include refid="dnatPolicyColumns"/>
FROM
ip_reuse_dnat_policy a
where a.IS_VALID != -1
and a.translated_user_id =#{userName}
</select>
</mapper>

View File

@@ -327,4 +327,14 @@ public class IpMultiplexService extends BaseService{
public IpReuseDnatPolicyCfg getDnatCfg(Long cfgId,Integer compileId) {
return ipMultiplexDao.getDnatCfg(cfgId,compileId);
}
public List<IpReusePolicyCfg> findByUser(String userName) {
List<IpReusePolicyCfg> list=ipMultiplexDao.findByUser(userName);
return list;
}
public List<IpReuseDnatPolicyCfg> findDnatUser(String userName) {
List<IpReuseDnatPolicyCfg> list=ipMultiplexDao.findDnatUser(userName);
return list;
}
}

View File

@@ -48,6 +48,12 @@ public class UserManageService extends BaseService{
return page;
}
public List<UserManage> findList(UserManage entity) {
List<UserManage> list=userManageDao.findList(entity);
return list;
}
public List<UserManage> findByPage(String ids ) {
List<UserManage> list=userManageDao.findByList(ids);
return list;

View File

@@ -1476,3 +1476,5 @@ mail_record=Mail Records
ssl_record=SSL Records
http_record=HTTP Records
second_bps=bps
ip_existed=IP has existed!
user_check=In use, Can not be deleted!

View File

@@ -1480,3 +1480,5 @@ block_drop=\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0
mail_record=\u0417\u0430\u043f\u0438\u0441\u0438 \u041f\u043e\u0447\u0442\u044b
ssl_record=SSL \u0417\u0430\u043f\u0438\u0441\u0438
http_record=HTTP \u0417\u0430\u043f\u0438\u0441\u0438
ip_existed=IP \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442!
user_check=\u0414\u0430\u043D\u043D\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 \u0437\u0430\u043D\u044F\u0442, \u043D\u0435\u043B\u044C\u0437\u044F \u0443\u0434\u0430\u043B\u0438\u0442\u044C!

View File

@@ -1476,3 +1476,5 @@ mail_record=\u90ae\u4ef6\u6cdb\u6536
ssl_record=SSL\u6cdb\u6536
http_record=HTTP\u6cdb\u6536
second_bps=bps
ip_existed=IP\u5DF2\u5B58\u5728\uFF01
user_check=\u6B63\u5728\u4F7F\u7528\uFF0C\u4E0D\u80FD\u5220\u9664\uFF01

View File

@@ -104,6 +104,23 @@ label.errorShow {
return flagLeafChange;
},"<spring:message code='leafChange'/>");
//校验ip是否重复
jQuery.validator.addMethod("ipRepeat",function(value,element){
var flagLeafChange=false;
$.ajax({
type:'post',
async:false,
url:'${ctx}/basics/serviceDictInfo/ajaxIpRepeat',
data:{oldIp:"${serviceDictInfo.itemValue}",ip:$("#itemValue").val(),type:5},
success:function(data){
flagLeafChange=data;
}
});
return flagLeafChange;
},"<spring:message code='ip_existed'/>");
jQuery.validator.addMethod("ipchecks",function(value,element){
var tel=/^(0|1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(0|1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(0|1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(0|1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$/;
return this.optional(element) || (tel.test(value));
@@ -252,7 +269,7 @@ label.errorShow {
</label>
<div class="col-md-4">
<c:if test="${itType==5 }">
<input class="form-control required ipchecks " id="itemValue" type="text" name="itemValue" value="${serviceDictInfo.itemValue}">
<input class="form-control required ipchecks ipRepeat" id="itemValue" type="text" name="itemValue" value="${serviceDictInfo.itemValue}">
</c:if>
<c:if test="${itType!=5 }">
<form:input path="itemValue" htmlEscape="false" maxlength="64" class="form-control required "/>