chenw пре 6 година
родитељ
комит
42e4756d79

+ 5 - 0
applications/school/school-server/pom.xml

@@ -116,6 +116,11 @@
             <artifactId>json-lib</artifactId>
             <classifier>jdk15</classifier>
         </dependency>
+      <dependency>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <artifactId>auth-dto</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+      </dependency>
     </dependencies>
 
     <build>

+ 9 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/SchoolApplication.java

@@ -1,13 +1,14 @@
 package com.usoftchina.smartschool.school;
 
+import com.usoftchina.smartschool.school.interceptor.AuthRestInterceptor;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.annotation.ComponentScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
 /**
@@ -23,6 +24,7 @@ public class SchoolApplication extends WebMvcConfigurerAdapter{
     public static void main(String[] args) {
         SpringApplication.run(SchoolApplication.class, args);
     }
+
     @Override
     public void addCorsMappings(CorsRegistry registry) {
 
@@ -32,4 +34,10 @@ public class SchoolApplication extends WebMvcConfigurerAdapter{
                 .allowedOrigins("*")
                 .allowedMethods("*");
     }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry){
+        registry.addInterceptor(new AuthRestInterceptor()).addPathPatterns("/**");
+        super.addInterceptors(registry);
+    }
 }

+ 59 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/interceptor/AuthRestInterceptor.java

@@ -0,0 +1,59 @@
+package com.usoftchina.smartschool.school.interceptor;
+
+import com.usoftchina.smartschool.auth.jwt.JwtHelper;
+import com.usoftchina.smartschool.auth.jwt.JwtInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import com.usoftchina.smartschool.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Enumeration;
+
+/**
+ * @author chenwei
+ * @date 2019/2/18
+ */
+@Component
+@Configuration
+public class AuthRestInterceptor extends HandlerInterceptorAdapter {
+
+    private static final Logger logger = LoggerFactory.getLogger(AuthRestInterceptor.class);
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        if (handler instanceof HandlerMethod) {
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            String token = null;
+            Enumeration<String> headers = request.getHeaders("Authorization");
+            while(headers.hasMoreElements()){
+                //取最后一个元素
+                token = headers.nextElement();
+            }
+            if (!StringUtils.isEmpty(token)) {
+                JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, "auth/pub.key");
+                BaseContextHolder.setAppId(infoFromToken.getAppId());
+                BaseContextHolder.setUserId(infoFromToken.getUserId());
+                BaseContextHolder.setUserName(infoFromToken.getUserName());
+                BaseContextHolder.setSchoolId(infoFromToken.getSchool_id());
+                BaseContextHolder.setToken(token);
+                logger.info("request={} school_id={} token={} \\r\\n userName={}  ", request.getRequestURI(),
+                        infoFromToken.getSchool_id(), token, infoFromToken.getUserName());
+            }
+        } else {
+            // no mapping
+        }
+        return super.preHandle(request, response, handler);
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        BaseContextHolder.remove();
+        super.afterCompletion(request, response, handler, ex);
+    }
+}

+ 1 - 0
base-servers/auth/auth-dto/src/main/java/com/usoftchina/smartschool/auth/jwt/JwtHelper.java

@@ -40,6 +40,7 @@ public class JwtHelper {
                             .claim("appId", jwtInfo.getAppId())
                             .claim("userId", jwtInfo.getUserId())
                             .claim("userName", jwtInfo.getUserName())
+                            .claim("school_id", jwtInfo.getSchool_id())
                             .setExpiration(DateTime.now().plusSeconds(expire).toDate())
                             // 设置算法(必须)
                             .signWith(SignatureAlgorithm.RS256, RsaUtils.getPrivateKey(priKeyPath))

+ 4 - 4
base-servers/gateway-server/src/main/java/com/usoftchina/smartschool/gateway/interceptor/ServiceFeignInterceptor.java

@@ -11,18 +11,18 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @date 2018/10/2
  */
 public class ServiceFeignInterceptor implements RequestInterceptor {
-   /* @Autowired
-    private AuthConfig authConfig;*/
+    @Autowired
+    private AuthConfig authConfig;
 
     public ServiceFeignInterceptor() {
     }
 
     @Override
     public void apply(RequestTemplate requestTemplate) {
-        //requestTemplate.header(authConfig.getAuthHeader(), BaseContextHolder.getToken());
+        requestTemplate.header(authConfig.getAuthHeader(), BaseContextHolder.getToken());
     }
 
     public void setAuthConfig(AuthConfig authConfig) {
-       // this.authConfig = authConfig;
+        this.authConfig = authConfig;
     }
 }