浏览代码

修复会话管理器配置

zhouhao 8 年之前
父节点
当前提交
6e6ed84d8b

+ 4 - 11
hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManagerConfiguration.java

@@ -4,6 +4,7 @@ import org.hsweb.web.core.session.HttpSessionManager;
 import org.hsweb.web.core.session.HttpSessionManagerListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.Ordered;
@@ -14,25 +15,17 @@ import org.springframework.session.data.redis.RedisOperationsSessionRepository;
 import javax.annotation.Resource;
 import java.util.List;
 
-/**
- * Created by zhouhao on 16-5-27.
- */
 @Configuration
 @ConditionalOnBean(value = RedisOperationsSessionRepository.class, name = "sessionRedisTemplate")
-@Order(Ordered.HIGHEST_PRECEDENCE)
+@ConditionalOnWebApplication
 public class RedisHttpSessionManagerConfiguration {
-    @Autowired(required = false)
-    private List<HttpSessionManagerListener> httpSessionManagerListeners;
 
     @Resource(name = "sessionRedisTemplate")
     private RedisTemplate sessionRedisTemplate;
 
-    @Bean
-    public HttpSessionManager sessionListener(RedisOperationsSessionRepository repository) {
+    @Bean(name = "httpSessionManager")
+    public HttpSessionManager redisHttpSessionManager(RedisOperationsSessionRepository repository) {
         RedisHttpSessionManager redisHttpSessionManager = new RedisHttpSessionManager();
-        if (httpSessionManagerListeners != null) {
-            redisHttpSessionManager.setListeners(httpSessionManagerListeners);
-        }
         redisHttpSessionManager.setSessionRedisTemplate(sessionRedisTemplate);
         redisHttpSessionManager.setRedisOperationsSessionRepository(repository);
         return redisHttpSessionManager;

+ 4 - 4
hsweb-web-core/src/main/java/org/hsweb/web/core/session/simple/SimpleHttpSessionManagerAutoConfiguration.java

@@ -11,16 +11,16 @@ import org.springframework.context.annotation.Configuration;
 @ConditionalOnWebApplication
 public class SimpleHttpSessionManagerAutoConfiguration {
 
-    @Bean
-    public HttpSessionManager simpleHttpSessionManager() {
+    @Bean(name = "httpSessionManager")
+    public HttpSessionManager httpSessionManager() {
         SimpleHttpSessionManager httpSessionManager = new SimpleHttpSessionManager();
         return httpSessionManager;
     }
 
     @Bean
-    public UserLoginOutListener sessionListener() {
+    public UserLoginOutListener sessionListener(HttpSessionManager httpSessionManager) {
         UserLoginOutListener loginOutListener = new UserLoginOutListener();
-        loginOutListener.setHttpSessionManager(simpleHttpSessionManager());
+        loginOutListener.setHttpSessionManager(httpSessionManager);
         return loginOutListener;
     }
 }

+ 16 - 0
hsweb-web-core/src/main/resources/org.hsweb.web.core.session.redis/getUserIds.lua

@@ -0,0 +1,16 @@
+local ids = redis.call('KEYS', 'http.session.user:*');
+local ids_ = {};
+for i, v in ipairs(ids) do
+
+    local userId = v:sub(19,-1);
+    local sessoinId = redis.call('GET', v);
+    local sessionExists = redis.call('EXISTS', 'spring:session:sessions:' .. sessoinId);
+    if (sessionExists== 1)
+    then
+        table.insert(ids_, userId);
+    else
+        return sessoinId;
+--        redis.call("DEL", 'http.session.user:' .. userId);
+    end
+end
+return ids_;

+ 15 - 3
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java

@@ -1,8 +1,12 @@
 package org.hsweb.web.service.impl;
 
+import org.hsweb.ezorm.meta.TableMetaData;
 import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.FormService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContextInitializer;
 import org.springframework.context.ApplicationEvent;
@@ -16,10 +20,12 @@ import javax.annotation.Resource;
 @Component
 public class FormDeployContextLoaderListener implements ApplicationListener<ContextRefreshedEvent> {
     @Resource
-    private FormService formService;
+    private FormService        formService;
     @Resource
     private DynamicFormService dynamicFormService;
 
+    private Logger logger = LoggerFactory.getLogger(this.getClass());
+
     @Override
     public void onApplicationEvent(ContextRefreshedEvent event) {
         if (event.getApplicationContext().getParent() != null) return;
@@ -28,9 +34,15 @@ public class FormDeployContextLoaderListener implements ApplicationListener<Cont
         try {
             formService.select(param).forEach(form -> {
                 try {
-                    dynamicFormService.deploy(form);
+                    Form deployed = formService.selectDeployed(form.getName());
+                    if (null != deployed) {
+                        TableMetaData metaData = dynamicFormService.parseMeta(deployed);
+                        dynamicFormService.getDefaultDatabase().reloadTable(metaData);
+                    } else {
+                        dynamicFormService.deploy(form);
+                    }
                 } catch (Exception e) {
-                    throw new RuntimeException(e);
+                    logger.error("部署{}:({})失败", form.getName(), form.getRemark(), e);
                 }
             });
         } catch (Exception e) {

+ 3 - 1
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -98,7 +98,9 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
 
     @Override
     public TableMetaData parseMeta(Form form) {
-        return formParser.parse(form);
+        TableMetaData metaData = formParser.parse(form);
+        initDefaultField(metaData);
+        return metaData;
     }
 
     @Override