Explorar el Código

会话管理优化

shimingxy hace 5 meses
padre
commit
2237c295df

+ 5 - 2
maxkey-webs/maxkey-web-mgt/src/main/java/org/dromara/maxkey/listener/SessionListenerAdapter.java → maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/listener/SessionListenerAdapter.java

@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.dromara.maxkey.listener;
+package org.dromara.maxkey.authn.listener;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -36,6 +36,8 @@ public class SessionListenerAdapter extends ScheduleAdapter   implements Job , S
 	
 	transient SessionManager sessionManager;
 
+	Integer category;
+	
 	@Override
 	public void execute(JobExecutionContext context) throws JobExecutionException {
 		 if(jobStatus == JOBSTATUS.RUNNING) {return;}
@@ -46,7 +48,7 @@ public class SessionListenerAdapter extends ScheduleAdapter   implements Job , S
         try {
             if(sessionManager != null) { 
             	int sessionCount = 0;
-            	for (HistoryLogin login : sessionManager.querySessions()) {
+            	for (HistoryLogin login : sessionManager.querySessions(category)) {
             		Session session = sessionManager.get(login.getSessionId());
             		if(session == null) {
             			logger.debug("TimeOut user {} session {}  Login at {} and  at {} ." ,
@@ -86,6 +88,7 @@ public class SessionListenerAdapter extends ScheduleAdapter   implements Job , S
 		 super.init(context);
     	if(sessionManager == null) {
     		sessionManager = getParameter("sessionManager",SessionManager.class);
+    		category = getParameter("category",Integer.class);
         }
     }
 }

+ 1 - 1
maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/session/SessionManager.java

@@ -34,7 +34,7 @@ public interface SessionManager {
 
     public Session refresh(String sessionId);
 
-    public List<HistoryLogin> querySessions();
+    public List<HistoryLogin> querySessions(Integer category);
 
     public int getValiditySeconds();
 

+ 1 - 1
maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/session/impl/InMemorySessionManager.java

@@ -106,7 +106,7 @@ public class InMemorySessionManager implements SessionManager{
 	}
 
 	@Override
-	public List<HistoryLogin> querySessions() {
+	public List<HistoryLogin> querySessions(Integer category) {
 		// not need implement
 		return null;
 	}

+ 1 - 1
maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/session/impl/RedisSessionManager.java

@@ -128,7 +128,7 @@ public class RedisSessionManager implements SessionManager {
     }
 
 	@Override
-	public List<HistoryLogin> querySessions() {
+	public List<HistoryLogin> querySessions(Integer category) {
 		// not need implement
 		return null;
 	}

+ 8 - 4
maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/session/impl/SessionManagerImpl.java

@@ -46,8 +46,7 @@ import org.springframework.jdbc.core.RowMapper;
  *
  */
 public class SessionManagerImpl implements SessionManager{
-	private static final  Logger _logger = 
-            LoggerFactory.getLogger(SessionManagerImpl.class);
+	private static final  Logger _logger = LoggerFactory.getLogger(SessionManagerImpl.class);
 	
 	private static final String DEFAULT_DEFAULT_SELECT_STATEMENT = 
 			"select id,sessionid,userId,username,displayname,logintime from mxk_history_login where sessionstatus = 1";
@@ -143,12 +142,17 @@ public class SessionManagerImpl implements SessionManager{
 	}
 
 	@Override
-	public List<HistoryLogin> querySessions() {
+	public List<HistoryLogin> querySessions(Integer category) {
 		//clear session id is null
 		jdbcTemplate.execute(NO_SESSION_UPDATE_STATEMENT);
+		String sessionSql =  DEFAULT_DEFAULT_SELECT_STATEMENT;
+		if(!isRedis) {
+			sessionSql = sessionSql + " and category = " + category;
+		}
+		 _logger.trace("sessionSql {} " ,sessionSql);
 		//query on line session
 		List<HistoryLogin> listSessions = jdbcTemplate.query(
-				DEFAULT_DEFAULT_SELECT_STATEMENT, 
+				sessionSql, 
 				new OnlineTicketRowMapper());
 		return listSessions;
 	}

+ 1 - 1
maxkey-web-frontend/maxkey-web-mgt-app/src/environments/environment.ts

@@ -27,7 +27,7 @@ export const environment = {
   production: false,
   useHash: true,
   api: {
-    baseUrl: 'http://localhost:9526/maxkey-mgt-api',
+    baseUrl: 'http://mgt.maxkey.top/maxkey-mgt-api',
     refreshTokenEnabled: true,
     refreshTokenType: 're-request'
   },

+ 12 - 18
maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/web/contorller/RegisterController.java

@@ -18,11 +18,11 @@
 package org.dromara.maxkey.web.contorller;
 
 import java.io.IOException;
-import java.util.regex.Pattern;
 
 import org.apache.commons.lang3.StringUtils;
 import org.dromara.maxkey.authn.jwt.AuthTokenService;
 import org.dromara.maxkey.configuration.ApplicationConfig;
+import org.dromara.maxkey.constants.ConstsRegex;
 import org.dromara.maxkey.constants.ConstsStatus;
 import org.dromara.maxkey.crypto.password.PasswordReciprocal;
 import org.dromara.maxkey.entity.Message;
@@ -36,22 +36,21 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 import jakarta.servlet.ServletException;
 
 
-@Controller
+@RestController
 @RequestMapping(value={"/signup"})
 public class RegisterController {
 	private static Logger logger = LoggerFactory.getLogger(RegisterController.class);
-	
-	Pattern mobileRegex = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
-	
+
 	@Autowired
 	AuthTokenService authTokenService;
 	
@@ -67,14 +66,12 @@ public class RegisterController {
 	@Autowired
 	PasswordEncoder passwordEncoder;
  	
-	@ResponseBody
-	@RequestMapping(value = { "/produceOtp" }, produces = {MediaType.APPLICATION_JSON_VALUE})
-	public Message<?> produceOtp(
-	    			@RequestParam String mobile) {
+	@GetMapping(value = { "/produceOtp" }, produces = {MediaType.APPLICATION_JSON_VALUE})
+	public Message<?> produceOtp(@RequestParam String mobile) {
         logger.debug("/signup/produceOtp Mobile {}: " ,mobile);
  
-    	logger.debug("Mobile Regex matches {}",mobileRegex.matcher(mobile).matches());
-    	if(StringUtils.isNotBlank(mobile) && mobileRegex.matcher(mobile).matches()) {
+    	logger.debug("Mobile Regex matches {}",ConstsRegex.MOBILE_PATTERN.matcher(mobile).matches());
+    	if(StringUtils.isNotBlank(mobile) && ConstsRegex.MOBILE_PATTERN.matcher(mobile).matches()) {
     		UserInfo userInfo = new UserInfo();
     		userInfo.setUsername(mobile);
     		userInfo.setMobile(mobile);
@@ -87,11 +84,8 @@ public class RegisterController {
     }
 	  
 	//直接注册
- 	@RequestMapping(value={"/register"})
- 	@ResponseBody
-	public Message<?> register(
-				@ModelAttribute UserInfo userInfo,
-				@RequestParam String captcha) throws ServletException, IOException {
+ 	@PostMapping(value={"/register"})
+	public Message<?> register(@ModelAttribute UserInfo userInfo , @RequestParam String captcha) throws ServletException, IOException {
  		UserInfo validateUserInfo = new UserInfo();
  		validateUserInfo.setUsername(userInfo.getMobile());
  		validateUserInfo.setMobile(userInfo.getMobile());

+ 3 - 1
maxkey-webs/maxkey-web-mgt/src/main/java/org/dromara/maxkey/autoconfigure/MaxKeyMgtListenerConfig.java

@@ -17,12 +17,13 @@
 
 package org.dromara.maxkey.autoconfigure;
 
+import org.dromara.maxkey.authn.listener.SessionListenerAdapter;
+import org.dromara.maxkey.authn.session.Session.CATEGORY;
 import org.dromara.maxkey.authn.session.SessionManager;
 import org.dromara.maxkey.configuration.ApplicationConfig;
 import org.dromara.maxkey.listener.DynamicGroupsListenerAdapter;
 import org.dromara.maxkey.listener.DynamicRolesListenerAdapter;
 import org.dromara.maxkey.listener.ReorgDeptListenerAdapter;
-import org.dromara.maxkey.listener.SessionListenerAdapter;
 import org.dromara.maxkey.persistence.service.ConnectorsService;
 import org.dromara.maxkey.persistence.service.GroupsService;
 import org.dromara.maxkey.persistence.service.OrganizationsService;
@@ -52,6 +53,7 @@ public class MaxKeyMgtListenerConfig  {
     		.setCron("0 0/10 * * * ?")
     		.setJobClass(SessionListenerAdapter.class)
     		.setJobData("sessionManager",sessionManager)
+    		.setJobData("category", CATEGORY.MGMT)
     		.build();
         logger.debug("Session ListenerAdapter inited .");
     	return "sessionListenerAdapter";