From 6f9d0eddacb7376b5c578ac7714cb55402b2b9b4 Mon Sep 17 00:00:00 2001 From: shimingxy Date: Fri, 13 Dec 2024 09:30:14 +0800 Subject: [PATCH] =?UTF-8?q?InstitutionsService=20=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=92=8C=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maxkey/authn/web/InstitutionEndpoint.java | 16 +-- .../mapper/InstitutionsMapper.java | 2 +- .../repository/InstitutionsRepository.java | 104 ------------------ .../service/InstitutionsService.java | 2 + .../service/impl/InstitutionsServiceImpl.java | 46 ++++++++ .../ApplicationAutoConfiguration.java | 6 - .../autoconfigure/MvcAutoConfiguration.java | 8 +- .../maxkey/web/WebInstRequestFilter.java | 10 +- 8 files changed, 63 insertions(+), 131 deletions(-) delete mode 100644 maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/repository/InstitutionsRepository.java diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/web/InstitutionEndpoint.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/web/InstitutionEndpoint.java index f81b61b6b..144a9d4f1 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/web/InstitutionEndpoint.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/dromara/maxkey/authn/web/InstitutionEndpoint.java @@ -21,7 +21,7 @@ import org.apache.commons.lang3.StringUtils; import org.dromara.maxkey.configuration.ApplicationConfig; import org.dromara.maxkey.entity.Institutions; import org.dromara.maxkey.entity.Message; -import org.dromara.maxkey.persistence.repository.InstitutionsRepository; +import org.dromara.maxkey.persistence.service.InstitutionsService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -42,7 +42,7 @@ public class InstitutionEndpoint { public static final String HEADER_HOSTNAME = "hostname"; @Autowired - InstitutionsRepository institutionsRepository; + InstitutionsService institutionsService; @Autowired ApplicationConfig applicationConfig; @@ -72,14 +72,8 @@ public class InstitutionEndpoint { _logger.trace("domain split {}",host); } - Institutions inst = institutionsRepository.get(host); - if(inst != null) { - _logger.debug("inst {}",inst); - return new Message<>(inst); - }else { - Institutions defaultInst = institutionsRepository.get("1"); - _logger.debug("default inst {}",inst); - return new Message<>(defaultInst); - } + Institutions inst = institutionsService.get(host); + _logger.debug("inst {}",inst); + return new Message<>(inst); } } diff --git a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/InstitutionsMapper.java b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/InstitutionsMapper.java index 86ed997ea..75fa4ace3 100644 --- a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/InstitutionsMapper.java +++ b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/InstitutionsMapper.java @@ -23,6 +23,6 @@ import org.dromara.mybatis.jpa.IJpaMapper; public interface InstitutionsMapper extends IJpaMapper { - @Select("select * from mxk_institutions where domain = #{value} and status = " + ConstsStatus.ACTIVE) + @Select("select * from mxk_institutions where (id = #{value} or domain = #{value} or consoledomain = #{value} ) and status = " + ConstsStatus.ACTIVE) public Institutions findByDomain(String domain); } diff --git a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/repository/InstitutionsRepository.java b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/repository/InstitutionsRepository.java deleted file mode 100644 index 8526c7056..000000000 --- a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/repository/InstitutionsRepository.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.dromara.maxkey.persistence.repository; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; - -import org.apache.commons.lang3.ObjectUtils; -import org.dromara.maxkey.entity.Institutions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; - -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; - -public class InstitutionsRepository { - static final Logger _logger = LoggerFactory.getLogger(InstitutionsRepository.class); - - private static final String SELECT_STATEMENT = - "select * from mxk_institutions where id = ? or domain = ? or consoledomain = ?" ; - - private static final String DEFAULT_INSTID = "1"; - - protected static final Cache institutionsStore = - Caffeine.newBuilder() - .expireAfterWrite(60, TimeUnit.MINUTES) - .build(); - - //id domain mapping - protected static final ConcurrentHashMap mapper = new ConcurrentHashMap<>(); - - protected JdbcTemplate jdbcTemplate; - - public InstitutionsRepository(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - public Institutions get(String instIdOrDomain) { - _logger.trace(" instId {}" , instIdOrDomain); - Institutions inst = getByInstIdOrDomain(instIdOrDomain); - if(inst == null) {//use default inst - inst = getByInstIdOrDomain(DEFAULT_INSTID); - institutionsStore.put(instIdOrDomain, inst); - } - return inst; - } - - private Institutions getByInstIdOrDomain(String instIdOrDomain) { - _logger.trace(" instId {}" , instIdOrDomain); - Institutions inst = institutionsStore.getIfPresent(mapper.get(instIdOrDomain)==null ? DEFAULT_INSTID : mapper.get(instIdOrDomain) ); - if(inst == null) { - List institutions = - jdbcTemplate.query(SELECT_STATEMENT,new InstitutionsRowMapper(),instIdOrDomain,instIdOrDomain,instIdOrDomain); - - if (ObjectUtils.isNotEmpty(institutions)) { - inst = institutions.get(0); - } - if(inst != null ) { - institutionsStore.put(inst.getDomain(), inst); - institutionsStore.put(inst.getConsoleDomain(), inst); - mapper.put(inst.getId(), inst.getDomain()); - } - } - - return inst; - } - - public class InstitutionsRowMapper implements RowMapper { - @Override - public Institutions mapRow(ResultSet rs, int rowNum) throws SQLException { - Institutions institution = new Institutions(); - institution.setId(rs.getString("id")); - institution.setName(rs.getString("name")); - institution.setFullName(rs.getString("fullname")); - institution.setLogo(rs.getString("logo")); - institution.setDomain(rs.getString("domain")); - institution.setFrontTitle(rs.getString("fronttitle")); - institution.setConsoleDomain(rs.getString("consoledomain")); - institution.setConsoleTitle(rs.getString("consoletitle")); - institution.setDefaultUri(rs.getString("defaultUri")); - return institution; - } - } -} diff --git a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/InstitutionsService.java b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/InstitutionsService.java index 57b098af2..a87b14de2 100644 --- a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/InstitutionsService.java +++ b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/InstitutionsService.java @@ -24,4 +24,6 @@ public interface InstitutionsService extends IJpaService{ public Institutions findByDomain(String domain) ; + + public Institutions get(String instIdOrDomain) ; } diff --git a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/impl/InstitutionsServiceImpl.java b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/impl/InstitutionsServiceImpl.java index 4093770d8..67d2c73f6 100644 --- a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/impl/InstitutionsServiceImpl.java +++ b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/impl/InstitutionsServiceImpl.java @@ -17,18 +17,64 @@ package org.dromara.maxkey.persistence.service.impl; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + import org.dromara.maxkey.entity.Institutions; import org.dromara.maxkey.persistence.mapper.InstitutionsMapper; import org.dromara.maxkey.persistence.service.InstitutionsService; import org.dromara.mybatis.jpa.service.impl.JpaServiceImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; + @Repository public class InstitutionsServiceImpl extends JpaServiceImpl implements InstitutionsService{ + static final Logger _logger = LoggerFactory.getLogger(InstitutionsServiceImpl.class); + + private static final String DEFAULT_INSTID = "1"; + protected static final Cache institutionsStore = + Caffeine.newBuilder() + .expireAfterWrite(60, TimeUnit.MINUTES) + .build(); + + //id domain mapping + protected static final ConcurrentHashMap mapper = new ConcurrentHashMap<>(); + + public Institutions findByDomain(String domain) { return getMapper().findByDomain(domain); } + public Institutions get(String instIdOrDomain) { + _logger.trace(" instId {}" , instIdOrDomain); + Institutions inst = getByDomain(instIdOrDomain); + if(inst == null) {//use default inst + inst = getByDomain(DEFAULT_INSTID); + institutionsStore.put(instIdOrDomain, inst); + } + return inst; + } + + private Institutions getByDomain(String instIdOrDomain) { + _logger.trace(" instId {}" , instIdOrDomain); + Institutions inst = institutionsStore.getIfPresent(mapper.get(instIdOrDomain)==null ? DEFAULT_INSTID : mapper.get(instIdOrDomain) ); + if(inst == null) { + Institutions institution = findByDomain(instIdOrDomain); + if(institution != null ) { + inst = institution; + institutionsStore.put(inst.getDomain(), inst); + institutionsStore.put(inst.getConsoleDomain(), inst); + mapper.put(inst.getId(), inst.getDomain()); + } + } + + return inst; + } + } diff --git a/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/ApplicationAutoConfiguration.java b/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/ApplicationAutoConfiguration.java index 513d420f7..78a6053ce 100644 --- a/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/ApplicationAutoConfiguration.java +++ b/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/ApplicationAutoConfiguration.java @@ -34,7 +34,6 @@ import org.dromara.maxkey.persistence.cache.InMemoryMomentaryService; import org.dromara.maxkey.persistence.cache.MomentaryService; import org.dromara.maxkey.persistence.cache.RedisMomentaryService; import org.dromara.maxkey.persistence.redis.RedisConnectionFactory; -import org.dromara.maxkey.persistence.repository.InstitutionsRepository; import org.dromara.maxkey.util.IdGenerator; import org.dromara.maxkey.util.SnowFlakeId; import org.dromara.maxkey.web.WebContext; @@ -67,11 +66,6 @@ public class ApplicationAutoConfiguration { return new DataSourceTransactionManager(dataSource); } - @Bean - InstitutionsRepository institutionsRepository(JdbcTemplate jdbcTemplate) { - return new InstitutionsRepository(jdbcTemplate); - } - /** * Authentication Password Encoder . * @return diff --git a/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java b/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java index fdbc97d7a..a6cf2709a 100644 --- a/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java +++ b/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java @@ -25,7 +25,7 @@ import java.util.List; import org.dromara.maxkey.configuration.ApplicationConfig; -import org.dromara.maxkey.persistence.repository.InstitutionsRepository; +import org.dromara.maxkey.persistence.service.InstitutionsService; import org.dromara.maxkey.web.WebInstRequestFilter; import org.dromara.maxkey.web.WebXssRequestFilter; import org.slf4j.Logger; @@ -299,11 +299,11 @@ public class MvcAutoConfiguration implements WebMvcConfigurer { @Bean FilterRegistrationBean webInstRequestFilter( - InstitutionsRepository institutionsRepository, - ApplicationConfig applicationConfig) { + InstitutionsService institutionsService, + ApplicationConfig applicationConfig) { _logger.debug("WebInstRequestFilter init for /* "); FilterRegistrationBean registrationBean = - new FilterRegistrationBean<>(new WebInstRequestFilter(institutionsRepository,applicationConfig)); + new FilterRegistrationBean<>(new WebInstRequestFilter(institutionsService,applicationConfig)); registrationBean.addUrlPatterns("/*"); registrationBean.setName("webInstRequestFilter"); registrationBean.setOrder(4); diff --git a/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/web/WebInstRequestFilter.java b/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/web/WebInstRequestFilter.java index 92369d7c9..e06c6032d 100644 --- a/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/web/WebInstRequestFilter.java +++ b/maxkey-starter/maxkey-starter-web/src/main/java/org/dromara/maxkey/web/WebInstRequestFilter.java @@ -23,7 +23,7 @@ import java.io.IOException; import org.apache.commons.lang3.StringUtils; import org.dromara.maxkey.configuration.ApplicationConfig; import org.dromara.maxkey.entity.Institutions; -import org.dromara.maxkey.persistence.repository.InstitutionsRepository; +import org.dromara.maxkey.persistence.service.InstitutionsService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.filter.GenericFilterBean; @@ -43,7 +43,7 @@ public class WebInstRequestFilter extends GenericFilterBean { public static final String HEADER_ORIGIN = "Origin"; - InstitutionsRepository institutionsRepository; + InstitutionsService institutionsService; ApplicationConfig applicationConfig; @@ -70,7 +70,7 @@ public class WebInstRequestFilter extends GenericFilterBean { _logger.trace("domain split {}",host); } _logger.trace("host {}",host); - Institutions institution = institutionsRepository.get(host); + Institutions institution = institutionsService.get(host); _logger.trace("{}" ,institution); request.getSession().setAttribute(WebConstants.CURRENT_INST, institution); @@ -83,9 +83,9 @@ public class WebInstRequestFilter extends GenericFilterBean { chain.doFilter(servletRequest, servletResponse); } - public WebInstRequestFilter(InstitutionsRepository institutionsRepository,ApplicationConfig applicationConfig) { + public WebInstRequestFilter(InstitutionsService institutionsService,ApplicationConfig applicationConfig) { super(); - this.institutionsRepository = institutionsRepository; + this.institutionsService = institutionsService; this.applicationConfig = applicationConfig; }