浏览代码

redis 订阅同步用户

vincent 3 年之前
父节点
当前提交
c22f79f1dd

+ 4 - 4
config/application.yml

@@ -18,7 +18,7 @@
 server:
   protocol: http
   address: 127.0.0.1
-  port: ${SERVER_PORT:8080}
+  port: ${SERVER_PORT:8081}
 
   servlet:
     context-path: /
@@ -100,7 +100,7 @@ spring:
   ## redis config
   ## please choose either of the two ways
   redis:
-    isEnable: false
+    isEnable: true
 
   ## standalone config
     host: 127.0.0.1
@@ -116,8 +116,8 @@ spring:
     jedis:
       pool:
         max-active: 8
-        max-wait: 1
-        max-idle: 8
+        max-wait: 1000
+        max-idle: 200
         min-idle: 0
 
   ## mail is one of the important configuration of the application

+ 2 - 1
server/src/main/java/edp/DavinciServerApplication.java

@@ -26,6 +26,7 @@ import com.alibaba.nacos.api.exception.NacosException;
 import com.alibaba.nacos.api.naming.NamingService;
 import com.alibaba.nacos.client.naming.utils.CollectionUtils;
 import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
+import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -35,11 +36,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import javax.annotation.PostConstruct;
 
 @SpringBootApplication(exclude = {
-        org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration.class,
         org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
 })
 @NacosPropertySource(dataId = "taihu-analysis", autoRefreshed = true)
 @EnableScheduling
+@EnableNacosDiscovery
 public class DavinciServerApplication {
 
     @NacosInjected

+ 2 - 0
server/src/main/java/edp/core/config/RedisEnableCondition.java

@@ -31,6 +31,8 @@ public class RedisEnableCondition implements Condition {
     public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
         if (isRedisEnable == null) {
             isRedisEnable = context.getEnvironment().getProperty("spring.redis.isEnable", Boolean.class);
+            System.out.println("isRedisEnable is "+ isRedisEnable);
+
         }
         return isRedisEnable != null && isRedisEnable;
     }

+ 8 - 0
server/src/main/java/edp/davinci/controller/UserController.java

@@ -80,6 +80,14 @@ public class UserController extends BaseController {
         return ResponseEntity.ok(new ResultMap().success().payload(tokenUtils.generateToken(user)));
     }
 
+    @ApiOperation(value = "insert user")
+    @AuthIgnore
+    @PostMapping(value = "/syncUser")
+    public ResponseEntity syncUser(@Valid @RequestBody UserRegist userRegist) {
+        User user = userService.regist(userRegist);
+        return ResponseEntity.ok(new ResultMap().success().payload(tokenUtils.generateToken(user)));
+    }
+
 
     /**
      * 用户激活

+ 40 - 0
server/src/main/java/edp/davinci/core/config/MessageReceiver.java

@@ -0,0 +1,40 @@
+package edp.davinci.core.config;
+
+import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import edp.davinci.dto.userDto.UserRegist;
+import edp.davinci.model.User;
+import edp.davinci.service.UserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MessageReceiver
+{
+    @Autowired
+    UserService userService;
+    /**
+     * 接收消息方法
+     */
+    public void receiverMessage(String message) {
+        if(StringUtils.isEmpty(message)){
+            log.error("message is empty");
+            return;
+        }
+        JSONArray jsonArray = JSONArray.parseArray(message);
+
+        for(int i =0;i<jsonArray.size();i++){
+            JSONObject userObject = jsonArray.getJSONObject(i);
+            log.debug(userObject.toString());
+            UserRegist user = new UserRegist();
+            user.setUsername(userObject.getString("username"));
+            user.setEmail(userObject.getString("email"));
+            user.setPassword(userObject.getString("password"));
+            userService.regist(user);
+        }
+        log.info("sync user is success");
+    }
+}

+ 9 - 1
server/src/main/java/edp/davinci/core/config/RedisMessageListener.java

@@ -46,11 +46,13 @@ public class RedisMessageListener {
     private RedisTemplate<String, Object> redisTemplate;
 
     @Bean
-    public RedisMessageListenerContainer container(MessageListenerAdapter messageListenerAdapter) {
+    public RedisMessageListenerContainer container(MessageListenerAdapter messageListenerAdapter,MessageListenerAdapter listenerAdapter2) {
         log.info("Registering bean for RedisMessageListenerContainer...");
         RedisMessageListenerContainer container = new RedisMessageListenerContainer();
         container.setConnectionFactory(redisTemplate.getConnectionFactory());
         container.addMessageListener(messageListenerAdapter, new PatternTopic(DAVINCI_TOPIC_CHANNEL));
+
+        container.addMessageListener(listenerAdapter2, new PatternTopic("syncUser"));
         return container;
     }
 
@@ -63,6 +65,12 @@ public class RedisMessageListener {
         return adapter;
     }
 
+    @Bean
+    MessageListenerAdapter listenerAdapter2(MessageReceiver receiver) {
+        return new MessageListenerAdapter(receiver, "receiverMessage");
+    }
+
+
 
     @Bean
     RedisMessageReceiver redisMessageReceiver() {

+ 107 - 18
server/src/main/java/edp/davinci/core/inteceptor/AuthenticationInterceptor.java

@@ -24,6 +24,7 @@ import com.alibaba.fastjson.JSONObject;
 import edp.core.annotation.AuthIgnore;
 import edp.core.annotation.AuthShare;
 import edp.core.enums.HttpCodeEnum;
+import edp.core.utils.RedisUtils;
 import edp.core.utils.TokenUtils;
 import edp.davinci.core.common.Constants;
 import edp.davinci.core.common.ErrorMsg;
@@ -31,7 +32,9 @@ import edp.davinci.core.common.ResultMap;
 import edp.davinci.model.User;
 import edp.davinci.service.UserService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.xmlbeans.impl.tool.XMLBean;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.client.RestTemplate;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
@@ -39,40 +42,95 @@ import org.springframework.web.servlet.ModelAndView;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
 
 @Slf4j
-public class AuthenticationInterceptor implements HandlerInterceptor {
+public class AuthenticationInterceptor implements HandlerInterceptor
+{
 
+    private final static String GET_USER_INFO_URL = "http://taihu-auth/thirdLogin/getUserInfo";
     @Autowired
     private TokenUtils tokenUtils;
 
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
+    {
 
         HandlerMethod handlerMethod = null;
-        try {
+        try
+        {
             handlerMethod = (HandlerMethod) handler;
-        } catch (Exception e) {
+        } catch (Exception e)
+        {
             response.setStatus(HttpCodeEnum.NOT_FOUND.getCode());
             return false;
         }
-        
+        // add by zhangheng
+        Method method = handlerMethod.getMethod();
+        AuthIgnore ignoreAuthMethod = method.getAnnotation(AuthIgnore.class);
+        //注解不需要验证token
+//        if (handler instanceof HandlerMethod && null != ignoreAuthMethod)
+//        {
+//            return true;
+//        }
+
+        String ticket = request.getParameter("ticket");
+        if (StringUtils.isEmpty(ticket))
+        {
+            if (!request.getServletPath().endsWith("/download/page"))
+            {
+                log.debug("{} : Unknown token", request.getServletPath());
+            }
+            response.setStatus(HttpCodeEnum.FORBIDDEN.getCode());
+            response.getWriter().print(ErrorMsg.ERR_MSG_AUTHENTICATION);
+            return false;
+        }
+        System.out.println(">>>>>" + ticket);
+        Map<String,Object> redisMap = (Map<String, Object>) redisUtils.get(ticket);
+        Map<String,Object> userMap = (Map<String, Object>) redisMap.get("user");
+        System.out.println(userMap.get("username"));
+        String username = (String) userMap.get("username");
+        User user = userService.getByUsername(username);
+        if (null == user)
+        {
+            if (!request.getServletPath().endsWith("/download/page"))
+            {
+                log.debug("{} : token user not found", request.getServletPath());
+            }
+            response.setStatus(HttpCodeEnum.FORBIDDEN.getCode());
+            response.getWriter().print(ErrorMsg.ERR_MSG_PERMISSION);
+            return false;
+
+        }
+        request.setAttribute(Constants.CURRENT_USER, user);
+        // add by zhangheng
+        /*
         Method method = handlerMethod.getMethod();
 
         AuthIgnore ignoreAuthMethod = method.getAnnotation(AuthIgnore.class);
         //注解不需要验证token
-        if (handler instanceof HandlerMethod && null != ignoreAuthMethod) {
+        if (handler instanceof HandlerMethod && null != ignoreAuthMethod)
+        {
             return true;
         }
 
         String token = request.getHeader(Constants.TOKEN_HEADER_STRING);
 
         AuthShare authShareMethod = method.getAnnotation(AuthShare.class);
-        if (null != authShareMethod) {
-            if (!StringUtils.isEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) {
+        if (null != authShareMethod)
+        {
+            if (!StringUtils.isEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
+            {
                 String username = tokenUtils.getUsername(token);
                 User user = userService.getByUsername(username);
                 request.setAttribute(Constants.CURRENT_USER, user);
@@ -80,8 +138,10 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
             return true;
         }
 
-        if (StringUtils.isEmpty(token) || !token.startsWith(Constants.TOKEN_PREFIX)) {
-            if (!request.getServletPath().endsWith("/download/page")) {
+        if (StringUtils.isEmpty(token) || !token.startsWith(Constants.TOKEN_PREFIX))
+        {
+            if (!request.getServletPath().endsWith("/download/page"))
+            {
                 log.debug("{} : Unknown token", request.getServletPath());
             }
             response.setStatus(HttpCodeEnum.FORBIDDEN.getCode());
@@ -90,8 +150,10 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
         }
         String username = tokenUtils.getUsername(token);
         User user = userService.getByUsername(username);
-        if (null == user) {
-            if (!request.getServletPath().endsWith("/download/page")) {
+        if (null == user)
+        {
+            if (!request.getServletPath().endsWith("/download/page"))
+            {
                 log.debug("{} : token user not found", request.getServletPath());
             }
             response.setStatus(HttpCodeEnum.FORBIDDEN.getCode());
@@ -99,8 +161,10 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
             return false;
 
         }
-        if (!tokenUtils.validateToken(token, user)) {
-            if (!request.getServletPath().endsWith("/download/page")) {
+        if (!tokenUtils.validateToken(token, user))
+        {
+            if (!request.getServletPath().endsWith("/download/page"))
+            {
                 log.debug("{} : token validation fails", request.getServletPath());
             }
             response.setStatus(HttpCodeEnum.FORBIDDEN.getCode());
@@ -108,8 +172,10 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
             return false;
         }
 
-        if (!request.getServletPath().contains("/user/active") && !user.getActive()) {
-            if (request.getServletPath().contains("/user/sendmail")) {
+        if (!request.getServletPath().contains("/user/active") && !user.getActive())
+        {
+            if (request.getServletPath().contains("/user/sendmail"))
+            {
                 request.setAttribute(Constants.CURRENT_USER, user);
                 return true;
             }
@@ -120,16 +186,39 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
             return false;
         }
         request.setAttribute(Constants.CURRENT_USER, user);
+         */
         return true;
     }
 
+    public String findUserInfo(String ticket)
+    {
+        Map<String, String> params = new HashMap<>();
+        params.put("ticket", ticket);
+        String body = null;
+
+        try
+        {
+            System.out.println(GET_USER_INFO_URL + "?ticket={ticket}");
+            body = restTemplate.getForEntity(GET_USER_INFO_URL + "?ticket={ticket}", String.class, params).getBody();
+            System.out.println(body);
+        } catch (Exception e)
+        {
+            log.error("调用接口异常,{}", e);
+        }
+
+        return body;
+    }
+
+
     @Override
-    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception
+    {
 
     }
 
     @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
+    {
 
     }
 }

+ 3 - 3
server/src/main/java/edp/davinci/dto/userDto/UserRegist.java

@@ -32,12 +32,12 @@ public class UserRegist {
     @NotBlank(message = "Username cannot be empty")
     private String username;
 
-    @NotBlank(message = "Email cannot be empty")
-    @Pattern(regexp = Constants.REG_EMAIL_FORMAT, message = "Invalid email format")
+//    @NotBlank(message = "Email cannot be empty")
+//    @Pattern(regexp = Constants.REG_EMAIL_FORMAT, message = "Invalid email format")
     private String email;
 
     @NotBlank(message = "Password cannot be empty")
-    @Pattern(regexp = Constants.REG_USER_PASSWORD, message = "密码长度为6-20位")
+//    @Pattern(regexp = Constants.REG_USER_PASSWORD, message = "密码长度为6-20位")
     private String password;
 
     @Override

+ 1 - 1
server/src/main/java/edp/davinci/service/impl/UserServiceImpl.java

@@ -166,7 +166,7 @@ public class UserServiceImpl extends BaseEntityService implements UserService {
                 throw new ServerException("Regist fail, unspecified error");
             }
             //添加成功,发送激活邮件
-            sendMail(user.getEmail(), user);
+//            sendMail(user.getEmail(), user);
             return user;
         } finally {
             releaseLock(usernameLock);