名字合法性验证

back_recharge
gaojie 2019-04-25 18:29:08 +08:00
parent 16ff5cc025
commit 85636fdabf
4 changed files with 154 additions and 8 deletions

View File

@ -8,18 +8,19 @@ import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.TeamPosManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.MathUtils;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.SensitivewordFilter;
import com.ljsd.jieling.util.*;
import org.luaj.vm2.ast.Str;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
public class PlayerLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(MailLogic.class);
private PlayerLogic(){}
public static PlayerLogic getInstance(){
@ -63,6 +64,9 @@ public class PlayerLogic {
User user = UserManager.getUser(uid);
PlayerManager playerInfoManager = user.getPlayerInfoManager();
TeamPosManager teamPosManager = user.getTeamPosManager();
// if (checkName(iSession, name, msgId)){
// return;
// }
if (type == 1) {
// 检查名字是否被占用
if (PlayerLogic.getInstance().isExistName(name)) {
@ -82,9 +86,57 @@ public class PlayerLogic {
MessageUtil.sendMessage(iSession,1,msgId,null,true);
}
private boolean checkName(ISession iSession, String name, int msgId) throws Exception {
int length = getStrLength(name);
if (length == -1) {
MessageUtil.sendErrorResponse(iSession, 0, msgId, "");
return true;
}
if (length > 14 || length < 1) {
MessageUtil.sendErrorResponse(iSession, 0, msgId, "");
return true;
}
boolean result = ShieldedWordUtils.checkName( name);
if (!result) {
MessageUtil.sendErrorResponse(iSession, 0, msgId, "");
return true;
}
return false;
}
private boolean isExistName(String name) {
String key = RedisKey.getKey(RedisKey.C_User_Name_Key, name, false);
Object myUid = RedisUtil.getInstence().get(key);
return myUid != null ;
}
/**
*
*
* @param value
* @return
*/
private int getStrLength(String value) {
int valueLength = 0;
String chinese = "[\u0391-\uFFE5]";
for (int i = 0; i < value.length(); i++) {
String temp = value.substring(i, i + 1);
if (EmojiUtil.isContainEmoji(temp)) {
LOGGER.error("==========> error , because of Emoji...");
return -1;// 如果含有敏感词汇 -1
}
if (temp.matches(chinese)) {
valueLength += 2;
} else {
valueLength += 1;
}
if (valueLength > 12) {
return valueLength;
}
}
return valueLength;
}
}

View File

@ -0,0 +1,39 @@
package com.ljsd.jieling.util;
/**
* Created by Administrator on 2016/4/26.
*/
public class EmojiUtil {
public static String getFinalStr(String scource){
for (int i = 0; i < scource.length(); i++) {
char c = scource.charAt(i);
if (!isEmojiCharacter(c)) {
scource = scource.replace(c,'*');
}
}
return scource;
}
public static boolean isContainEmoji(String scource){
for (int i = 0; i < scource.length(); i++) {
char c = scource.charAt(i);
if (!isEmojiCharacter(c)) {
return true;
}
}
return false;
}
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) ||
(codePoint == 0x9) ||
(codePoint == 0xA) ||
(codePoint == 0xD) ||
((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
}

View File

@ -0,0 +1,42 @@
package com.ljsd.jieling.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ShieldedWordUtils {
public static boolean checkName(String name){
boolean result = validateUserName(name);
if(!result){
return false;
}
result = isContaintSensitiveWord(name);
if(result){
return false;
}
return true;
}
/**
* 线 ,4-20,
*
* @param userName
* @return
* @author www.zuidaima.com
*/
public static boolean validateUserName(String userName) {
String validateStr = "^[\\\\w\\\\-_[A-Za-z0-9]\\u4e00-\\u9fa5\\uFF21-\\uFF3A\\uFF41-\\uFF5A]+$";
return matcher(validateStr, userName);
}
private static boolean matcher(String reg, String string) {
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(string);
return matcher.matches();
}
public static boolean isContaintSensitiveWord(String userName){
boolean hasDirtyWords = SensitivewordFilter.isContaintSensitiveWord(userName, 1);
return hasDirtyWords;
}
}

View File

@ -21,7 +21,7 @@ public class NettyClient {
private static final Logger LOGGER = LoggerFactory.getLogger(NettyClient.class);
private static int uid = 40000072;
private static int uid = 10003124;
private static int msgIndex = 1;
private static int token=543242;
@ -45,6 +45,10 @@ public class NettyClient {
//---------------------------------------------------------------------------------------------------------
handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.LOGIN_REQUEST_VALUE));
// for (int i = 0; i < 100; i++){
// handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.RANDOMNAME_REQUEST_VALUE));
// }
handler.sendRequest_jieling(makeFinalMessage(reName(), MessageTypeProto.MessageType.RENAME_REQUEST_VALUE));
// handler.sendRequest_jieling(makeFinalMessage(getHero(), MessageTypeProto.MessageType.GET_HEROINFO_REQUEST_VALUE));
// handler.sendRequest_jieling(makeFinalMessage(getRandomHero(), MessageTypeProto.MessageType.HERO_RAND_REQQUEST_VALUE));
// handler.sendRequest_jieling(makeFinalMessage(gmRequest(11001), MessageTypeProto.MessageType.GM_REQUEST_VALUE));
@ -63,9 +67,18 @@ public class NettyClient {
} catch (Exception e) {
e.printStackTrace();
}*/
handler.sendRequest_jieling(makeFinalMessage(createEquip(3001), MessageTypeProto.MessageType.WORKSHOP_EQUIP_CREATE_REQUEST_VALUE));
// handler.sendRequest_jieling(makeFinalMessage(createEquip(3001), MessageTypeProto.MessageType.WORKSHOP_EQUIP_CREATE_REQUEST_VALUE));
}
private static MessageLite reName() {
PlayerInfoProto.ReNameRequest reNameRequest = PlayerInfoProto.ReNameRequest.newBuilder()
.setType(1)
.setName("哈哈哈哈")
.build();
return reNameRequest;
}
private static MessageLite heroComperRequest(int itemId, int itemNum) {
@ -99,7 +112,7 @@ public class NettyClient {
Tea.intToByte(packetData, 0, uid); //uid
Tea.intToByte(packetData, 4, token); //token
Tea.intToByte(packetData, 8,msgNum); //msgId
Tea.intToByte(packetData, 12, msgIndex); // msgIndex
Tea.intToByte(packetData, 12, msgIndex++); // msgIndex
System.arraycopy(messageData, 0, packetData, 16, messageData.length);
int[] secretKey = Tea.KEY;
@ -108,7 +121,7 @@ public class NettyClient {
}
public static CommonProto.GMCommand gmRequest(int itemId){
return CommonProto.GMCommand.newBuilder().setCommand("2#"+itemId+"#1").build();
return CommonProto.GMCommand.newBuilder().setCommand("8#"+0+"#1").build();
}
public HeroInfoProto.UpHeroStarRequest upHeroStar(){