Parcourir la source

Merge remote-tracking branch 'origin/xjw' into xjw

MengyangDuan il y a 5 ans
Parent
commit
657a17a38c

+ 52 - 0
pom.xml

@@ -78,6 +78,11 @@
             <artifactId>hanlp</artifactId>
             <version>portable-1.7.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.8</version>
+        </dependency>
 
         <dependency>
             <groupId>org.springframework.cloud</groupId>
@@ -90,6 +95,53 @@
             <artifactId>spring-cloud-context</artifactId>
         </dependency>
 
+<!--        nacos-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-gateway</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.cloud</groupId>
+                    <artifactId>spring-boot-starter-web</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-web</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-webflux</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- Nacos Client -->
+        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
+<!--            <version>0.9.0.RELEASE</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
+<!--        </dependency>-->
+        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <version>2.1.0.RELEASE</version>
+        </dependency>
+
+
+
+
+        <!-- actuator -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
 
 
     </dependencies>

+ 30 - 0
src/main/java/edu/nju/configuration/RestTemplateConfiguration.java

@@ -0,0 +1,30 @@
+package edu.nju.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-28 11:10
+ */
+@Configuration
+public class RestTemplateConfiguration {
+    @Bean
+    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
+        RestTemplate restTemplate = new RestTemplate(factory);
+        restTemplate.setErrorHandler(new RestTemplateErrorHandler());
+        return restTemplate;
+    }
+
+    @Bean
+    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setConnectTimeout(15000);
+        factory.setReadTimeout(5000);
+        return factory;
+    }
+}

+ 23 - 0
src/main/java/edu/nju/configuration/RestTemplateErrorHandler.java

@@ -0,0 +1,23 @@
+package edu.nju.configuration;
+
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.web.client.ResponseErrorHandler;
+
+import java.io.IOException;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-29 01:32
+ */
+public class RestTemplateErrorHandler implements ResponseErrorHandler {
+    @Override
+    public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
+        return false;
+    }
+
+    @Override
+    public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {
+
+    }
+}

+ 24 - 0
src/main/java/edu/nju/configuration/WebMvcConfiguration.java

@@ -0,0 +1,24 @@
+package edu.nju.configuration;
+
+import edu.nju.controller.interceptor.AuthCheckInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-29 14:19
+ */
+@Configuration
+public class WebMvcConfiguration implements WebMvcConfigurer {
+    @Autowired
+    private AuthCheckInterceptor authCheckInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authCheckInterceptor)
+                .addPathPatterns("/**");
+    }
+}

+ 70 - 0
src/main/java/edu/nju/controller/OAuthController.java

@@ -0,0 +1,70 @@
+package edu.nju.controller;
+
+import edu.nju.controller.data.UserInfo;
+import edu.nju.controller.interceptor.AuthRequired;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-28 10:38
+ */
+@Slf4j
+@RestController
+public class OAuthController {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @RequestMapping(value = "/auth", method = RequestMethod.GET)
+    public void auth(@RequestParam("task_id") Long taskId,
+                     @RequestParam("case_id") Long caseId,
+                     @RequestParam("code") String code, HttpSession session, HttpServletResponse response){
+        String authUrl = "http://api.mooctest.net/api/v1/oauth/ticket?code="+code;
+        String userUrl = "http://api.mooctest.net/api/v1/user?session_ticket=";
+        ResponseEntity<Map> ticketResponse = restTemplate.getForEntity(authUrl, Map.class);
+        if (ticketResponse.getStatusCode().is4xxClientError()){
+            log.info(ticketResponse.getBody().get("message").toString());
+            throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
+        }
+        String  session_ticket = (String)ticketResponse.getBody().get("session_ticket");
+        ResponseEntity<UserInfo> userInfoResponse = restTemplate.getForEntity(userUrl + session_ticket, UserInfo.class);
+        if (userInfoResponse.getStatusCode().is4xxClientError()){
+            log.info(ticketResponse.getBody().get("message").toString());
+            throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
+        }
+        session.setAttribute("userInfo", userInfoResponse.getBody());
+        session.setAttribute("caseId", caseId);
+        session.setAttribute("taskId", taskId);
+        try {
+            response.sendRedirect("http://47.99.140.117:9001/report/detail/"+taskId+"/"+caseId+"/"+userInfoResponse.getBody().getId());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @AuthRequired
+    @RequestMapping(value = "/auth/user", method = RequestMethod.GET)
+    public UserInfo getLoginUser(HttpSession session){
+        if (session.getAttribute("userInfo")==null)
+            throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
+        UserInfo userInfo = (UserInfo) session.getAttribute("userInfo");
+        return userInfo;
+    }
+
+}

+ 2 - 0
src/main/java/edu/nju/controller/ReportController.java

@@ -6,6 +6,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import edu.nju.controller.interceptor.AuthRequired;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +35,7 @@ public class ReportController {
 	DotService dservice;
 	
 	//获取用户的有效信息
+	@AuthRequired
 	@RequestMapping(value = "/report")
 	@ResponseBody
 	public void getReport(String report_id, String case_take_id, HttpServletResponse response) {

+ 27 - 0
src/main/java/edu/nju/controller/data/UserInfo.java

@@ -0,0 +1,27 @@
+package edu.nju.controller.data;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-29 12:19
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserInfo {
+    private Long id;
+
+    private String email;
+
+    private String name;
+
+    private String mobile;
+
+    private String school;
+
+    private String open_id;
+}

+ 44 - 0
src/main/java/edu/nju/controller/interceptor/AuthCheckInterceptor.java

@@ -0,0 +1,44 @@
+package edu.nju.controller.interceptor;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-29 14:15
+ */
+@Slf4j
+@Component
+public class AuthCheckInterceptor extends HandlerInterceptorAdapter {
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        if (hasAuthRequired(handler)){
+            log.info("需要认证的接口访问行为");
+            if (request.getSession().getAttribute("userInfo") == null)
+                throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
+            else
+                log.info("用户已登录, userInfo:"+request.getSession().getAttribute("userInfo"));
+        }
+        return true;
+    }
+
+    private boolean hasAuthRequired(Object handler) {
+        if(handler instanceof HandlerMethod) {
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            AuthRequired authRequired = handlerMethod.getMethod().getAnnotation(AuthRequired.class);
+            if(authRequired==null){
+                authRequired = handlerMethod.getBeanType().getAnnotation(AuthRequired.class);
+            }
+            return !(authRequired == null);
+        }
+        return false;
+    }
+}

+ 16 - 0
src/main/java/edu/nju/controller/interceptor/AuthRequired.java

@@ -0,0 +1,16 @@
+package edu.nju.controller.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-29 14:17
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuthRequired {
+}

+ 0 - 13
src/main/resources/application.properties

@@ -1,13 +0,0 @@
-server.port = 8091
-server.servlet.context-path = /Bug/api/
-
-#spring.data.mongodb.host = ${MONGO_HOST:10.81.65.118}
-#spring.data.mongodb.port = ${MONGO_PORT:29019}
-#spring.data.mongodb.database = ${MONGO_DBNAME:co-report-test}
-
-spring.data.mongodb.uri= mongodb://localhost:27017/test
-
-spring.http.encoding.force = true
-spring.http.encoding.charset = UTF-8
-spring.http.encoding.enabled = true
-server.tomcat.uri-encoding = UTF-8

+ 18 - 0
src/main/resources/application.yml

@@ -0,0 +1,18 @@
+sleep: 0
+
+# 配置输出日志
+logging:
+  level:
+    org.springframework.cloud.gateway: TRACE
+    org.springframework.http.server.reactive: DEBUG
+    org.springframework.web.reactive: DEBUG
+    reactor.ipc.netty: DEBUG
+
+#开启端点
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*'
+  security:
+    enabled: false

+ 31 - 12
src/main/resources/bootstrap.yml

@@ -1,13 +1,32 @@
-spring.profiles.active: test
+spring.profiles.active: dev
+#spring.profiles.active: test
 spring:
-                          application:
-                            name: mooctest-crowdsource-backend
-                          cloud:
-                            zookeeper:
-                              enabled: true  # true:开启zookeeper外部化配置, false:读取本地配置;
-                              connect-string: 101.37.175.111:2181
-                              config:
-                                root: /config
-                                enabled: true
-                                watcher:
-                                  enabled: true
+  application:
+    name: mooctest-crowdsource-backend
+  cloud:
+    zookeeper:
+      enabled: true  # true:开启zookeeper外部化配置, false:读取本地配置;
+      connect-string: 101.37.175.111:2181
+      config:
+        root: /config
+        enabled: true
+        watcher:
+          enabled: true
+#    nacos:
+#      discovery:e.e
+#        # 指定nacos server的地址
+#        server-addr: 127.0.0.1:8848
+# actuator相关配置
+#management:
+#  endpoints:
+#    web:
+#      exposure:
+#        # 暴露所有监控端点
+#        include: '*'
+#  endpoint:
+#    health:
+#      # 总是显示健康检测详情
+#      show-details: always
+
+#server:
+#  port: 8082

+ 2 - 2
src/main/resources/logback.xml

@@ -4,7 +4,7 @@
 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!--<fileNamePattern>/back_end/logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+<!--            <fileNamePattern>/back_end/logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
             <fileNamePattern>./logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>
             <maxHistory>30</maxHistory>
         </rollingPolicy>
@@ -19,7 +19,7 @@
 
     <appender name="recommendAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!--<fileNamePattern>/back_end/logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+<!--            <fileNamePattern>/back_end/logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
             <fileNamePattern>./logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>
         </rollingPolicy>
         <encoder>