Explorar el Código

非法关键词调整

liusw hace 8 años
padre
commit
b4ca60d4c2

+ 2 - 1
pom.xml

@@ -46,7 +46,8 @@
 	<dependencies>
 		<dependency>
 			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
+			<artifactId>javax.servlet-api</artifactId>
+			<version>3.0.1</version>
 		</dependency>
 		<dependency>
 			<groupId>junit</groupId>

+ 63 - 0
src/main/java/com/uas/platform/b2c/core/filter/KeyWordFilter.java

@@ -0,0 +1,63 @@
+package com.uas.platform.b2c.core.filter;
+
+import com.uas.platform.b2c.common.keyword.service.KeyWordService;
+import com.uas.platform.b2c.core.support.BodyReaderHttpServletRequestWrapper;
+import java.io.IOException;
+import java.util.Set;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+
+/**
+ * 非法关键字过滤
+ * @author liusw
+ */
+public class KeyWordFilter implements Filter {
+    public static Set<String> keyworsSet = null;
+
+    @Override
+    public void destroy() {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
+            ServletException {
+        HttpServletRequest req = (HttpServletRequest) arg0;
+        HttpServletResponse response = (HttpServletResponse) arg1;
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        if(!req.getMethod().equals("GET")){
+            //注入Service
+            ServletContext sc = req.getSession().getServletContext();
+            XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);
+            KeyWordService keyWordService= null;
+            if(cxt != null && cxt.getBean("keyWordService") != null && keyWordService == null)
+                keyWordService = (KeyWordService) cxt.getBean("keyWordService");
+            if(keyworsSet == null){
+                keyworsSet = keyWordService.getAllKeyWordContent();
+            }
+            //request包装类  改写getParameterValues和getInputStream
+            ServletRequest requestWrapper = new BodyReaderHttpServletRequestWrapper(req);
+            arg2.doFilter(requestWrapper, response);
+        }else{
+            arg2.doFilter(req, response);
+        }
+    }
+
+
+
+    @Override
+    public void init(FilterConfig arg0) throws ServletException {
+        // TODO Auto-generated method stub
+    }
+}

+ 77 - 0
src/main/java/com/uas/platform/b2c/core/support/BodyReaderHttpServletRequestWrapper.java

@@ -0,0 +1,77 @@
+package com.uas.platform.b2c.core.support;
+
+import com.uas.platform.b2c.core.filter.KeyWordFilter;
+import com.uas.platform.b2c.core.utils.KeyWordFilterUtil;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.Enumeration;
+import java.util.Set;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+/**
+ * 用于将request重新进行封装
+ *
+ * @author liusw
+ */
+public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
+    private final byte[] body;
+
+    public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
+        super(request);
+        body = HttpHelper.getBodyString(request).getBytes(Charset.forName("UTF-8"));
+    }
+
+    @Override
+    public String[] getParameterValues(String name) {
+        String[] result = super.getParameterValues(name);
+        if(result!=null &&result.length>0){
+            Set<String> keywords = null;
+            for(int i=0;i<result.length;i++){
+                keywords = KeyWordFilterUtil.getSensitiveWord(result[i], 0,KeyWordFilterUtil.initKeyWord(
+                        KeyWordFilter.keyworsSet));
+                if(keywords!=null && keywords.size()>0){
+                    for(String s : keywords){
+                        result[i] = result[i].replaceAll(s,"*");
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream() {
+            @Override
+            public int read() throws IOException {
+                return bais.read();
+            }
+        };
+    }
+
+    @Override
+    public String getHeader(String name) {
+        return super.getHeader(name);
+    }
+
+    @Override
+    public Enumeration<String> getHeaderNames() {
+        return super.getHeaderNames();
+    }
+
+    @Override
+    public Enumeration<String> getHeaders(String name) {
+        return super.getHeaders(name);
+    }
+}

+ 59 - 0
src/main/java/com/uas/platform/b2c/core/support/HttpHelper.java

@@ -0,0 +1,59 @@
+package com.uas.platform.b2c.core.support;
+
+import com.uas.platform.b2c.core.filter.KeyWordFilter;
+import com.uas.platform.b2c.core.utils.KeyWordFilterUtil;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.Set;
+import javax.servlet.ServletRequest;
+
+/**
+ * 获取请求Body
+ *
+ * @author liusw
+ */
+public class HttpHelper {
+
+    public static String getBodyString(ServletRequest request) {
+        StringBuilder sb = new StringBuilder();
+        InputStream inputStream = null;
+        BufferedReader reader = null;
+        try {
+            inputStream = request.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null) {
+                sb.append(line);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        String body = sb.toString();
+        Set<String> keywords = KeyWordFilterUtil.getSensitiveWord(body, 0,KeyWordFilterUtil.initKeyWord(
+                KeyWordFilter.keyworsSet));
+        if(keywords!=null && keywords.size()>0) {
+            for (String s : keywords) {
+                body = body.replaceAll(s,"*");
+            }
+        }
+        return body;
+    }
+}

+ 2 - 0
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -164,6 +164,8 @@
 					class="fa fa-flag"></i><span> 批量修改器件类目</span></a></li>
 			<li class="nav-node"><a href="#/kindAdvice"><i
 					class="fa fa-flag"></i><span> 用户类目维护建议</span></a></li>
+			<li class="nav-node"><a href="#/keyWord"><i
+					class="fa fa-flag"></i><span> 非法关键词维护</span></a></li>
 
 			<li class="nav-header">禁用信息</li>
 			<li class="nav-node"><a href="#/disable/brand"><i

+ 9 - 3
src/main/webapp/resources/js/admin/app.js

@@ -1,4 +1,4 @@
- define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage'], function(angularAMD) {
+ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/keyWord'], function(angularAMD) {
 	'use strict';
 
 	 /**
@@ -8,7 +8,7 @@
 		 return this.length > 0 ? this[this.length - 1] : null;
 	 };
 
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','keyWordServices']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -584,7 +584,13 @@
 			controller: 'KindAdviceCtrl',
 			controllerUrl: 'app/controllers/product/KindAdviceCtrl',
 			title: '轮播图片管理'
-		})).state('slideImage', angularAMD.route({
+		})).state('keyWord', angularAMD.route({
+      url: '/keyWord',
+      templateUrl: 'static/view/admin/keyword.html',
+      controller: 'KeyWordCtrl',
+      controllerUrl: 'app/controllers/KeyWordCtrl',
+      title: '非法关键词维护'
+    })).state('slideImage', angularAMD.route({
 			// 首页展示(轮播图片管理)
 			url: '/operation/slideImage',
 			templateUrl: 'static/view/admin/operation/slideImage.html',