Преглед на файлове

新增技淘百问处理

anderx преди 2 години
родител
ревизия
33993f50cb

+ 90 - 0
src/main/java/com/goafanti/baiduAI/bo/SseEventBo.java

@@ -0,0 +1,90 @@
+package com.goafanti.baiduAI.bo;
+
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+
+import java.util.Set;
+
+public class SseEventBo implements SseEmitter.SseEventBuilder {
+    private String id;
+    private String comment;
+    private String name;
+    private Long reconnectTime;
+    private Object data;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getReconnectTime() {
+        return reconnectTime;
+    }
+
+    public void setReconnectTime(Long reconnectTime) {
+        this.reconnectTime = reconnectTime;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+    @Override
+    public SseEmitter.SseEventBuilder comment(String s) {
+        return null;
+    }
+
+    @Override
+    public SseEmitter.SseEventBuilder name(String s) {
+        return null;
+    }
+
+    @Override
+    public SseEmitter.SseEventBuilder id(String s) {
+        return null;
+    }
+
+    @Override
+    public SseEmitter.SseEventBuilder reconnectTime(long l) {
+        return null;
+    }
+
+    @Override
+    public SseEmitter.SseEventBuilder data(Object o) {
+        return null;
+    }
+
+    @Override
+    public SseEmitter.SseEventBuilder data(Object o, MediaType mediaType) {
+        return null;
+    }
+
+    @Override
+    public Set<ResponseBodyEmitter.DataWithMediaType> build() {
+        return null;
+    }
+}

+ 26 - 1
src/main/java/com/goafanti/baiduAI/bo/SseResult.java

@@ -8,10 +8,35 @@ public class SseResult {
         public long timestamp;
         public SseEmitter sseEmitter;
 
-        public SseResult(String clientId, long timestamp, SseEmitter sseEmitter) {
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(long timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public SseEmitter getSseEmitter() {
+        return sseEmitter;
+    }
+
+    public void setSseEmitter(SseEmitter sseEmitter) {
+        this.sseEmitter = sseEmitter;
+    }
+
+    public SseResult(String clientId, long timestamp, SseEmitter sseEmitter) {
             this.clientId = clientId;
             this.timestamp = timestamp;
             this.sseEmitter = sseEmitter;
         }
     }
 
+

+ 23 - 10
src/main/java/com/goafanti/baiduAI/controller/BaiduAiController.java

@@ -1,17 +1,27 @@
 package com.goafanti.baiduAI.controller;
 
 import com.goafanti.baiduAI.bo.InputSendChat;
+import com.goafanti.baiduAI.bo.Messages;
 import com.goafanti.baiduAI.bo.SseMap;
 import com.goafanti.baiduAI.bo.SseResult;
 import com.goafanti.baiduAI.service.BaiduAiService;
 import com.goafanti.common.bo.Result;
+import com.goafanti.common.constant.ErrorConstants;
+import com.goafanti.common.controller.BaseController;
+import com.goafanti.common.controller.CertifyApiController;
+import com.goafanti.common.model.AftUser;
 import com.goafanti.common.utils.LoggerUtils;
+import com.goafanti.common.utils.StringUtils;
+import com.goafanti.core.shiro.token.TokenManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.List;
+import java.util.UUID;
 
 @RestController
 @RequestMapping(value = "/chat")
@@ -20,23 +30,26 @@ public class BaiduAiController {
     @Autowired
     private BaiduAiService baiduAiService;
 
-    @RequestMapping(value = "/send",method = RequestMethod.POST)
-    public Result sendChat(@RequestBody InputSendChat in){
-        Result res =new Result();
-        return res.data(baiduAiService.sendChat(in));
+    @RequestMapping(value = "/send")
+    public SseEmitter sendChat( InputSendChat in){
+        if (in.getUserId()==null ){
+//            in.setUserId(UUID.randomUUID().toString());
+            in.setUserId("111");
+            in.setStream(true);
+        }
+        List<Messages> messages =new ArrayList<>();
+        messages.add(new Messages("user","实用新型专利主要应用哪些领域?"));
+        in.setMessages(messages);
+        return baiduAiService.sendChat(in);
     }
 
-    @RequestMapping(value = "/sendJS",method = RequestMethod.POST)
-    public Result sendJS(@RequestBody InputSendChat in){
-        Result res =new Result();
-        return res.data(baiduAiService.sendJS(in));
-    }
+
 
     @RequestMapping("/start")
     public SseEmitter testSseEmitter(String clientId) {
         // 默认30秒超时,设置为0L则永不超时
         SseEmitter sseEmitter = new SseEmitter(3600_000L);
-        if (clientId==null)clientId="10086";
+//        if (clientId==null)clientId=UUID.randomUUID().toString();
         SseMap.sseEmitterMap.put(clientId, new SseResult(clientId, System.currentTimeMillis(), sseEmitter));
         return sseEmitter;
     }

+ 3 - 3
src/main/java/com/goafanti/baiduAI/service/BaiduAiService.java

@@ -1,12 +1,12 @@
 package com.goafanti.baiduAI.service;
 
 import com.goafanti.baiduAI.bo.InputSendChat;
-import com.goafanti.baiduAI.bo.OutSendChat;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 public interface BaiduAiService {
 
 
-    OutSendChat sendChat(InputSendChat in);
+    SseEmitter sendChat(InputSendChat in);
+
 
-    String sendJS(InputSendChat in);
 }

+ 8 - 39
src/main/java/com/goafanti/baiduAI/service/impl/BaiduAiServiceImpl.java

@@ -12,6 +12,7 @@ import com.goafanti.common.utils.RedisUtil;
 import com.goafanti.core.shiro.cache.ShiroRedisCache;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 import javax.annotation.Resource;
 import java.io.IOException;
@@ -31,53 +32,21 @@ public class BaiduAiServiceImpl implements BaiduAiService {
 
 
     @Override
-    public OutSendChat sendChat(InputSendChat in) {
-
-            String result = null;
-        try {
-
-            result= baiduChatUtils.sendBaiduAI(in);
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new BusinessException("文言一心调用失败"+e.getLocalizedMessage());
-        }
-        if (in.isStream()){
-            Map<String ,Object> resultMap=JSON.parseObject(result, Map.class);
-            for (String key : SseMap.sseEmitterMap.keySet()) {
-                try {
-                    SseResult sseResult=SseMap.sseEmitterMap.get(key);
-//                    Map map=new HashMap();
-//                    map.put("result",resultMap.get("result"));
-//                    String s = JSON.toJSONString(map);
-//                    sseResult.sseEmitter.send(s);
-                    sseResult.sseEmitter.send(resultMap);
-                } catch (IOException e) {
-                    SseMap.sseEmitterMap.remove(key);
-                }
-            }
-            return new OutSendChatOK();
-        }else {
-            OutSendChat outSendChat = pushResultToOutSendChat(result);
-            return outSendChat;
-        }
-
-    }
-
-    @Override
-    public String sendJS(InputSendChat in) {
-
-        String result = null;
+    public SseEmitter sendChat(InputSendChat in) {
+        SseEmitter sseEmitter = new SseEmitter(3600_000L);
+//        if (clientId==null)clientId=UUID.randomUUID().toString();
+        SseMap.sseEmitterMap.put(in.getUserId(), new SseResult(in.getUserId(), System.currentTimeMillis(), sseEmitter));
         try {
-            result= baiduChatUtils.sendBaiduAI(in);
+//            先将数据返回,异步调用返回数据
+            baiduChatUtils.sendBaiduAiStream(in);
         } catch (IOException e) {
             e.printStackTrace();
             throw new BusinessException("文言一心调用失败"+e.getLocalizedMessage());
         }
-        return result;
+            return sseEmitter;
     }
 
 
-
     private OutSendChat pushResultToOutSendChat(String result) {
 
         Map<String ,Object> resultMap=JSON.parseObject(result, Map.class);

+ 7 - 6
src/main/java/com/goafanti/common/controller/BaseController.java

@@ -33,7 +33,7 @@ public class BaseController {
 
 	@Value(value = "${static.host}")
 	private String					staticHost			= null;
-	
+
 	@Value(value = "${skjt.host}")
 	private String					skjtHost			= null;
 
@@ -57,7 +57,7 @@ public class BaseController {
 
 	@Value(value = "${avatar.upload.host}")
 	private String					avatarUploadHost	= null;
-	
+
 	@Value(value = "${video.server}")
 	private String					videoServer	= null;
 
@@ -75,7 +75,7 @@ public class BaseController {
 
 	/**
 	 * 带参数的error message
-	 * 
+	 *
 	 * @param key
 	 * @param message
 	 * @param object
@@ -122,9 +122,7 @@ public class BaseController {
 		model.addAttribute("avatarUploadHost", avatarUploadHost);
 		model.addAttribute("portalHost", portalHost);
 		model.addAttribute("basePath", request.getContextPath());
-		model.addAttribute("shiro", SecurityUtils.getSubject());
-		model.addAttribute("isLogin", TokenManager.isLogin());
-		model.addAttribute("csrf", TokenManager.getCSRF());
+
 		model.addAttribute("videoServer", videoServer);
 		model.addAttribute("isAdmin", false);
 		int yearCount=0;
@@ -134,6 +132,9 @@ public class BaseController {
 		if (TokenManager.isLogin() && TokenManager.getToken() instanceof User) {
 			model.addAttribute("userData", TokenManager.getUserToken());
 			model.addAttribute("userName", TokenManager.getUserToken().getNickname());
+			model.addAttribute("shiro", SecurityUtils.getSubject());
+			model.addAttribute("isLogin", TokenManager.isLogin());
+			model.addAttribute("csrf", TokenManager.getCSRF());
 		}
 
 		if (TokenManager.isLogin() && TokenManager.getToken() instanceof Admin) {

+ 6 - 0
src/main/java/com/goafanti/common/controller/WebpageController.java

@@ -1614,6 +1614,12 @@ public class WebpageController extends BaseController {
 		return modelAndView;
 	}
 
+	@RequestMapping("/portal/test")
+	public ModelAndView test(ModelAndView modelAndView){
+		modelAndView.setViewName("/portal/test");
+		return modelAndView;
+	}
+
 	/**
 	 * 新闻详情
 	 * @param modelview

+ 25 - 0
src/main/java/com/goafanti/common/utils/AsyncUtils.java

@@ -0,0 +1,25 @@
+package com.goafanti.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.goafanti.baiduAI.bo.OutSendChatOK;
+import com.goafanti.baiduAI.bo.SseMap;
+import com.goafanti.baiduAI.bo.SseResult;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+@Component
+@Async
+public class AsyncUtils {
+
+
+
+}

+ 22 - 9
src/main/java/com/goafanti/common/utils/BaiduChatUtils.java

@@ -3,10 +3,14 @@ package com.goafanti.common.utils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.goafanti.baiduAI.bo.InputSendChat;
+import com.goafanti.baiduAI.bo.OutSendChatOK;
+import com.goafanti.baiduAI.bo.SseMap;
+import com.goafanti.baiduAI.bo.SseResult;
 import com.goafanti.common.error.BusinessException;
 import okhttp3.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
@@ -16,6 +20,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
+import java.net.ProtocolException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.Calendar;
@@ -80,7 +85,9 @@ public class BaiduChatUtils {
         return result;
     }
 
-    public void sendBaiduAiStream() throws IOException {
+    @Async
+    public void sendBaiduAiStream(InputSendChat inputSendChat) throws IOException {
+        System.out.println("异步调用获取数据");
         try {
             String baidu_url=BAIDU_CHAT_WXYY_URL+getRedisBaiduAccessToken();
             URL url = new URL(baidu_url);
@@ -90,15 +97,15 @@ public class BaiduChatUtils {
             connection.setDoInput(true);
             connection.setDoOutput(true);
             // 构造请求体
-            String requestBody = "{\"messages\":[{\"role\":\"user\",\"content\":\"给我介绍一条从四川自驾到拉萨的路线\"}],\"stream\":true}";
+//            String requestBody = "{\"messages\":[{\"role\":\"user\",\"content\":\"给我介绍一条从四川自驾到拉萨的路线\"}],\"stream\":true}";
+            String requestBody=JSON.toJSONString(inputSendChat);
             byte[] postData = requestBody.getBytes(StandardCharsets.UTF_8);
             connection.setRequestProperty("Content-Length", String.valueOf(postData.length));
             connection.getOutputStream().write(postData);
-
             InputStream responseStream = connection.getInputStream();
-            BufferedReader reader = new BufferedReader(new InputStreamReader(responseStream));
-
+            BufferedReader reader = new BufferedReader(new InputStreamReader(responseStream,"UTF-8"));
             String line;
+            SseResult res =  SseMap.sseEmitterMap.get(inputSendChat.getUserId());
             while ((line = reader.readLine())!= null) {
                 // 每行数据中以 "data:" 开头的部分即为实际的响应数据
                 if (line.startsWith("data:")) {
@@ -109,12 +116,18 @@ public class BaiduChatUtils {
                     if(isEnd){
                         break;
                     }
-                    System.out.println("result: " + result.replaceAll("\n", ""));
+//                  OutSendChatOK out =jsonObject.toJavaObject(OutSendChatOK.class);
+                    System.out.println(data);
+                    res.sseEmitter.send(data, org.springframework.http.MediaType.APPLICATION_JSON);
                 }
             }
+            SseMap.sseEmitterMap.remove(inputSendChat.getUserId());
+            res.sseEmitter.complete();
             reader.close();
         } catch (MalformedURLException e) {
             e.printStackTrace();
+        } catch (ProtocolException e) {
+            e.printStackTrace();
         }
     }
 
@@ -133,14 +146,14 @@ public class BaiduChatUtils {
                 redisUtil.deleteString("baiduAccessToken");
                 redisUtil.deleteString("baiduAccessTime");
                 redisAccessToken=pushRedisBaiduAccessToken();
-                LoggerUtils.debug(getClass(),"accessToken过期,重新获取");
+                LoggerUtils.debug(getClass(),"accessToken过期,重新获取");
             }else {
                 redisAccessToken=  redisUtil.getString("baiduAccessToken");
-                LoggerUtils.debug(getClass(),"accessToken从redis获取");
+                LoggerUtils.debug(getClass(),"accessToken从redis获取成功!");
             }
         }else {
             redisAccessToken=pushRedisBaiduAccessToken();
-            LoggerUtils.debug(getClass(),"accessToken不存在,从百度获取");
+            LoggerUtils.debug(getClass(),"accessToken不存在,从百度获取");
         }
         return redisAccessToken;
     }

+ 22 - 22
src/main/java/com/goafanti/core/shiro/token/TokenManager.java

@@ -19,7 +19,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前登录的用户User对象
-	 * 
+	 *
 	 * @return
 	 */
 	public static AftUser getToken() {
@@ -28,7 +28,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前登录的用户User对象Role
-	 * 
+	 *
 	 * @return
 	 */
 	public static boolean hasRole(String role) {
@@ -37,7 +37,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前登录的用户User对象Permission
-	 * 
+	 *
 	 * @return
 	 */
 	public static boolean hasPermission(String permission) {
@@ -46,7 +46,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前用户的Session
-	 * 
+	 *
 	 * @return
 	 */
 	public static Session getSession() {
@@ -55,7 +55,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前用户ID
-	 * 
+	 *
 	 * @return
 	 */
 	public static String getUserId() {
@@ -64,7 +64,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前用户WebSocketID
-	 * 
+	 *
 	 * @return
 	 */
 	public static String getWebSocketKey() {
@@ -73,7 +73,7 @@ public class TokenManager {
 
 	/**
 	 * 把值放入到当前登录用户的Session里
-	 * 
+	 *
 	 * @param key
 	 * @param value
 	 */
@@ -83,7 +83,7 @@ public class TokenManager {
 
 	/**
 	 * 从当前登录用户的Session里取值
-	 * 
+	 *
 	 * @param key
 	 * @return
 	 */
@@ -93,7 +93,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前登录的普通用户对象
-	 * 
+	 *
 	 * @return
 	 */
 	public static User getUserToken() {
@@ -107,7 +107,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前登录的管理员对象
-	 * 
+	 *
 	 * @return
 	 */
 	public static Admin getAdminToken() {
@@ -121,7 +121,7 @@ public class TokenManager {
 
 	/**
 	 * 获取当前管理员ID
-	 * 
+	 *
 	 * @return
 	 */
 	public static String getAdminId() {
@@ -129,9 +129,9 @@ public class TokenManager {
 	}
 
 	/**
-	 * 
+	 *
 	 * 获取当前管理员所在省份
-	 * 
+	 *
 	 * @return
 	 */
 	/*
@@ -141,7 +141,7 @@ public class TokenManager {
 
 	/**
 	 * 获取验证码,获取一次后删除
-	 * 
+	 *
 	 * @return
 	 */
 	public static String getYZM() {
@@ -152,7 +152,7 @@ public class TokenManager {
 
 	/**
 	 * 获取CSRF TOKEN
-	 * 
+	 *
 	 * @return
 	 */
 	public static String getCSRF() {
@@ -161,7 +161,7 @@ public class TokenManager {
 
 	/**
 	 * 用户登录
-	 * 
+	 *
 	 * @param user
 	 * @param rememberMe
 	 * @return
@@ -173,10 +173,10 @@ public class TokenManager {
 		setVal2Session(CSRF_TOKEN, UUID.randomUUID().toString().replace("-", ""));
 		return (User) getToken();
 	}
-	
+
 	/**
 	 * skjt用户登录
-	 * 
+	 *
 	 * @param user
 	 * @param rememberMe
 	 * @return
@@ -191,7 +191,7 @@ public class TokenManager {
 
 	/**
 	 * 管理员登录
-	 * 
+	 *
 	 * @param admin
 	 * @param rememberMe
 	 * @return
@@ -205,7 +205,7 @@ public class TokenManager {
 
 	/**
 	 * 判断是否登录
-	 * 
+	 *
 	 * @return
 	 */
 	public static boolean isLogin() {
@@ -231,14 +231,14 @@ public class TokenManager {
 
 	/**
 	 * 根据UserIds 清空权限信息。
-	 * 
+	 *
 	 * @param id
 	 *            用户ID
 	 */
 	public static void clearUserAuthByUserId(String... userIds) {
 		realm.clearCachedAuthorizationInfo(userIds);
 	}
-	
+
 	/**
 	 * 获取UserType
 	 */

+ 78 - 0
src/main/webapp/WEB-INF/views/portal/test.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>SseEmitter</title>
+</head>
+<body>
+<button onclick="closeSse()">关闭连接</button>
+<div id="message"></div>
+</body>
+<script>
+    let source = null;
+
+    // 用时间戳模拟登录用户
+    const userId = new Date().getTime();
+
+    console.log(userId);
+
+
+    if (!!window.EventSource) {
+
+        // 建立连接
+        source = new EventSource('http://localhost:8080/chat/send');
+
+        /**
+         * 连接一旦建立,就会触发open事件
+         * 另一种写法:source.onopen = function (event) {}
+         */
+        source.addEventListener('open', function (e) {
+            setMessageInnerHTML("建立连接。。。");
+        }, false);
+
+        /**
+         * 客户端收到服务器发来的数据
+         * 另一种写法:source.onmessage = function (event) {}
+         */
+        source.addEventListener('message', function (e) {
+            setMessageInnerHTML(e.data);
+        });
+
+
+        /**
+         * 如果发生通信错误(比如连接中断),就会触发error事件
+         * 或者:
+         * 另一种写法:source.onerror = function (event) {}
+         */
+        source.addEventListener('error', function (e) {
+            if (e.readyState === EventSource.CLOSED) {
+                setMessageInnerHTML("连接关闭");
+            } else {
+                console.log(e);
+            }
+        }, false);
+
+    } else {
+        setMessageInnerHTML("你的浏览器不支持SSE");
+    }
+
+    // 监听窗口关闭事件,主动去关闭sse连接,如果服务端设置永不过期,浏览器关闭后手动清理服务端数据
+    window.onbeforeunload = function () {
+        closeSse();
+    };
+
+    // 关闭Sse连接
+    function closeSse() {
+        source.close();
+        const httpRequest = new XMLHttpRequest();
+        httpRequest.open('GET', 'http://localhost:8080/chat/close/' + userId, true);
+        httpRequest.send();
+        console.log("close");
+    }
+
+    // 将消息显示在网页上
+    function setMessageInnerHTML(innerHTML) {
+        document.getElementById('message').innerHTML += innerHTML + '<br/>';
+    }
+</script>
+</html>

+ 9 - 8
src/main/webapp/WEB-INF/web.xml

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  
+	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                              http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 	version="3.1">
 
 	<display-name>AFT</display-name>
 
-	<!-- The definition of the Root Spring Container shared by all Servlets 
+	<!-- The definition of the Root Spring Container shared by all Servlets
 		and Filters -->
 	<context-param>
 		<param-name>spring.profiles.active</param-name>
@@ -17,7 +17,7 @@
 	<listener>
 		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
 	</listener>
-	
+
 	<filter>
 		<filter-name>CorsFilter</filter-name>
 		<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
@@ -78,22 +78,23 @@
 		<load-on-startup>1</load-on-startup>
 		<async-supported>true</async-supported>
 	</servlet>
-	
+
+
 	<!-- <servlet>
 		<servlet-name>DruidStatView</servlet-name>
 		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
 		<init-param>
-			
+
 			<param-name>resetEnable</param-name>
 			<param-value>true</param-value>
 		</init-param>
 		<init-param>
-			
+
 			<param-name>loginUsername</param-name>
 			<param-value>druid</param-value>
 		</init-param>
 		<init-param>
-			
+
 			<param-name>loginPassword</param-name>
 			<param-value>aft@2016</param-value>
 		</init-param>
@@ -123,5 +124,5 @@
 		<error-code>500</error-code>
 		<location>/WEB-INF/views/error.jsp</location>
 	</error-page>
-	
+
 </web-app>