Jelajahi Sumber

Merge branch 'master' of http://47.100.37.243:10080/wutt/game.git

sunyadv 5 tahun lalu
induk
melakukan
c629e2ea9f

+ 127 - 0
minigame/src/com/estates/filter/EmojiHttpServletRequestWraper.java

@@ -0,0 +1,127 @@
+package com.estates.filter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.apache.commons.lang.StringUtils;
+
+
+public class EmojiHttpServletRequestWraper extends HttpServletRequestWrapper {
+
+    public EmojiHttpServletRequestWraper(HttpServletRequest request) {
+        super(request);
+    }
+    
+    @Override
+    public String getParameter(String name) {
+        return filterEmoji(super.getParameter(name));
+    }
+    
+    @Override
+    public String getHeader(String name) {
+        return filterEmoji(super.getParameter(name));
+    }
+    
+    
+    
+    @Override
+    public String[] getParameterValues(String name) {
+        System.out.println("getParameterValues----->转义处理:"+name);
+        if(!StringUtils.isEmpty(name)){
+            String[] values = super.getParameterValues(name);
+            if(values != null ){
+            	if(values.length > 0) {
+            		String[] newValues = new String[values.length];
+            		
+            		for(int i =0; i< values.length; i++){
+            			if (containsEmoji(values[i])) {
+            				System.out.println("包含emoji:"+values[i]);
+            				newValues[i] = filterEmoji(values[i]);
+            				System.out.println("包含emoji,处理后:"+newValues[i]);
+            			} else {
+            				newValues[i] = values[i];
+            			}
+            		}
+            		return newValues;
+            	}
+            } 
+        }
+        return null;
+    }
+
+    
+    public static boolean containsEmoji(String source) {
+        if (StringUtils.isBlank(source)) {
+            return false;
+        }
+
+        int len = source.length();
+
+        for (int i = 0; i < len; i++) {
+            char codePoint = source.charAt(i);
+
+            if (isEmojiCharacter(codePoint)) {
+                //do nothing,判断到了这里表明,确认有表情字符
+                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));
+    }
+
+    /**
+     * 过滤emoji 或者 其他非文字类型的字符
+     * @param source
+     * @return
+     */
+    public static String filterEmoji(String source) {
+    	if (source == null || "".equals(source)) {
+    		return source;
+    	}
+    	System.out.println("过滤 = "+source);
+        source = source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");
+        if (!containsEmoji(source)) {
+            return source;//如果不包含,直接返回
+        }
+        //到这里铁定包含
+        StringBuilder buf = null;
+
+        int len = source.length();
+
+        for (int i = 0; i < len; i++) {
+            char codePoint = source.charAt(i);
+
+            if (isEmojiCharacter(codePoint)) {
+                if (buf == null) {
+                    buf = new StringBuilder(source.length());
+                }
+
+                buf.append(codePoint);
+            } else {
+                buf.append("*");
+            }
+        }
+
+        if (buf == null) {
+            return source;//如果没有找到 emoji表情,则返回源字符串
+        } else {
+            if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
+                buf = null;
+                return source;
+            } else {
+                return buf.toString();
+            }
+        }
+
+    }
+}

+ 3 - 3
minigame/src/com/hssx/controller/PrizeController.java

@@ -64,7 +64,7 @@ public class PrizeController {
 		prizeRecord.setVoucherId(user.getVoucherId());
 		prizeRecord.setNickName(user.getNickName());
 		UserPrizeCountExample uExp = new UserPrizeCountExample();
-		Integer luckDrawCount = UserPrizeCountMapper.selectCountByToday();
+		Integer luckDrawCount = UserPrizeCountMapper.selectCountByTodayByUid(userId);
 		HashMap<String, Object> map = new HashMap<String, Object>();
 		if (luckDrawCount == 0) {
 			// 直接抽奖
@@ -77,7 +77,7 @@ public class PrizeController {
 			map.put("prizeRecord", prizeRecord);
 			msg.data = map;
 		} else if (luckDrawCount == 1) {
-			int opportunityCount = prizeOpportunityMapper.selectCountByToday();
+			int opportunityCount = prizeOpportunityMapper.selectCountByToday(userId);
 			if (opportunityCount > 0) {
 				// 直接抽奖
 				count = getLuckDraw(prizeRecord, count);
@@ -209,7 +209,7 @@ public class PrizeController {
 	public void luckDrawAddCount(PrizeRecord prizeRecord, HttpServletResponse response)
 			throws Exception, KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException, IOException {
 		HttpRespMsg msg = new HttpRespMsg();
-		int count = prizeOpportunityMapper.selectCountByToday();
+		int count = prizeOpportunityMapper.selectCountByToday(prizeRecord.getUid());
 		if (count == 0) {
 			PrizeOpportunity prizeOpportunity = new PrizeOpportunity();
 			prizeOpportunity.setIsShare(1);

+ 2 - 1
minigame/src/com/hssx/controller/UserController.java

@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.estates.filter.EmojiHttpServletRequestWraper;
 import com.hssx.constant.Constant;
 import com.hssx.entity.User;
 import com.hssx.entity.UserExample;
@@ -64,7 +65,7 @@ public class UserController {
 				System.out.println(resp);
 				json = (JSONObject) JSON.parse(resp);
 				if (!json.containsKey("errcode")) {
-					user.setNickName(json.getString("nickname"));
+					user.setNickName(EmojiHttpServletRequestWraper.filterEmoji(json.getString("nickname")));
 					user.setHeaderPic(json.getString("headimgurl"));
 				}
 				System.out.println(user + "user");

+ 1 - 1
minigame/src/com/hssx/mapper/PrizeOpportunityMapper.java

@@ -74,5 +74,5 @@ public interface PrizeOpportunityMapper {
 	 */
 	int updateByPrimaryKey(PrizeOpportunity record);
 
-	int selectCountByToday();
+	int selectCountByToday(@Param("uid")Integer uid);
 }

+ 1 - 1
minigame/src/com/hssx/mapper/PrizeOpportunityMapper.xml

@@ -286,7 +286,7 @@
   
    <select id="selectCountByToday" resultType="java.lang.Integer">
   select count(id) from mini_prize_opportunity
-  WHERE TO_DAYS(indate) = TO_DAYS(NOW())
+  WHERE TO_DAYS(indate) = TO_DAYS(NOW()) and uid = #{uid}
   </select>
   
 </mapper>

+ 1 - 1
minigame/src/com/hssx/mapper/UserPrizeCountMapper.java

@@ -96,5 +96,5 @@ public interface UserPrizeCountMapper {
      */
     int updateByPrimaryKey(UserPrizeCount record);
     
-    int selectCountByToday();
+    int selectCountByTodayByUid(@Param("userId")Integer userId);
 }

+ 2 - 2
minigame/src/com/hssx/mapper/UserPrizeCountMapper.xml

@@ -252,8 +252,8 @@
     where id = #{id,jdbcType=INTEGER}
   </update>
   
-  <select id="selectCountByToday" resultType="java.lang.Integer">
+  <select id="selectCountByTodayByUid" resultType="java.lang.Integer">
   select count(id) from mini_user_prize_count
-  WHERE TO_DAYS(indate) = TO_DAYS(NOW())
+  WHERE user_id = #{userId} AND TO_DAYS(indate) = TO_DAYS(NOW()) 
   </select>
 </mapper>