From db23586fd744582cd8ee237c34ff29d9277009ee Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期一, 01 七月 2024 15:45:29 +0800 Subject: [PATCH] 用户管理添加 --- src/main/java/com/whyc/controller/UserInfController.java | 65 + src/main/java/com/whyc/util/HttpUtil.java | 97 ++ src/main/java/com/whyc/util/JasyptUtils.java | 69 + src/main/java/com/whyc/mapper/OperationLogMapper.java | 7 src/main/resources/mapper/UserInfMapper.xml | 37 + src/main/java/com/whyc/util/UserUtil.java | 25 src/main/resources/config/application-dev.yml | 13 src/main/java/com/whyc/service/OperationLogService.java | 136 +++ src/main/java/com/whyc/properties/PropertiesUtil.java | 38 + src/main/java/com/whyc/config/CaffeineConfig.java | 89 ++ src/main/java/com/whyc/constant/YamlProperties.java | 136 +-- src/main/java/com/whyc/webSocket/LoginCheckSocket.java | 92 ++ pom.xml | 29 src/main/java/com/whyc/service/UserInfService.java | 227 ++++++ src/main/java/com/whyc/controller/OperationLogController.java | 31 src/main/java/com/whyc/pojo/UserInf.java | 46 + src/main/java/com/whyc/util/MD5Util.java | 47 + src/main/java/com/whyc/config/ShiroConfig.java | 124 +++ src/main/java/com/whyc/controller/IndexController.java | 26 src/main/java/com/whyc/realm/CustomRealm.java | 55 + src/main/java/com/whyc/mapper/DocUserMapper.java | 14 src/main/java/com/whyc/controller/LoginController.java | 44 + src/main/java/com/whyc/anotation/Realm.java | 20 src/main/java/com/whyc/filter/RolesOrAuthorizationFilter.java | 36 + src/main/java/com/whyc/constant/OperationLogEnum.java | 50 + src/main/java/com/whyc/mapper/UserInfMapper.java | 26 src/main/resources/config/application-prod.yml | 21 src/main/java/com/whyc/pojo/OperationLog.java | 39 + src/main/java/com/whyc/util/RSAUtil.java | 280 +++++++ src/main/java/com/whyc/App.java | 2 src/main/java/com/whyc/service/UserBridgeService.java | 76 ++ src/main/java/com/whyc/properties/LinkProperties.java | 146 ++++ 32 files changed, 2,059 insertions(+), 84 deletions(-) diff --git a/pom.xml b/pom.xml index 3dcd92d..80d3fd0 100644 --- a/pom.xml +++ b/pom.xml @@ -106,6 +106,33 @@ <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> + <!--shiro--> + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-spring-boot-web-starter</artifactId> + <version>1.5.3</version> + </dependency> + + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.15</version> + </dependency> + <dependency> + <groupId>com.github.ulisesbocchio</groupId> + <artifactId>jasypt-spring-boot-starter</artifactId> + <version>3.0.4</version> + </dependency> + <dependency> + <groupId>com.github.ben-manes.caffeine</groupId> + <artifactId>caffeine</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context-support</artifactId> + <version>5.3.9</version> + </dependency> + <!--<dependency> <groupId>org.springframework.plugin</groupId> <artifactId>spring-plugin-core</artifactId> @@ -137,6 +164,8 @@ <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> + + </dependencies> <build> diff --git a/src/main/java/com/whyc/App.java b/src/main/java/com/whyc/App.java index 215147f..c4cb99a 100644 --- a/src/main/java/com/whyc/App.java +++ b/src/main/java/com/whyc/App.java @@ -16,7 +16,7 @@ @EnableWebMvc @ServletComponentScan(basePackages = {"com.whyc.filter","com.whyc.servlet","com.whyc.listener"}) @EnableCaching -public class App extends WebMvcConfigurerAdapter implements WebMvcConfigurer { +public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); diff --git a/src/main/java/com/whyc/anotation/Realm.java b/src/main/java/com/whyc/anotation/Realm.java new file mode 100644 index 0000000..0823c2d --- /dev/null +++ b/src/main/java/com/whyc/anotation/Realm.java @@ -0,0 +1,20 @@ +package com.whyc.anotation; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface Realm { + @AliasFor( + annotation = Component.class + ) + String value() default ""; + +} diff --git a/src/main/java/com/whyc/config/CaffeineConfig.java b/src/main/java/com/whyc/config/CaffeineConfig.java new file mode 100644 index 0000000..b785d8e --- /dev/null +++ b/src/main/java/com/whyc/config/CaffeineConfig.java @@ -0,0 +1,89 @@ +package com.whyc.config; + +import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.cache.CacheManager; +import org.springframework.cache.caffeine.CaffeineCache; +import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import java.util.ArrayList; + +/** + * Caffeine閰嶇疆 + */ +@Configuration +public class CaffeineConfig { + + public static enum Caches{ + defaultCache(500), + defaultCache2Exp(500,24) + ; + + Caches() { + } + + Caches(int maxSize) { + this.maxSize = maxSize; + } + + Caches(int maxSize, int ttl) { + this.maxSize = maxSize; + this.ttl = ttl; + } + + private int maxSize; + private int ttl; + + public int getMaxSize() { + return maxSize; + } + + public void setMaxSize(int maxSize) { + this.maxSize = maxSize; + } + + public int getTtl() { + return ttl; + } + + public void setTtl(int ttl) { + this.ttl = ttl; + } + } + + @Bean + @Primary + public CacheManager caffeineCacheManager() { + SimpleCacheManager cacheManager = new SimpleCacheManager(); + ArrayList<CaffeineCache> caffeineCaches = new ArrayList<>(); + + for (Caches cache : Caches.values()) { + caffeineCaches.add(new CaffeineCache(cache.name(), + Caffeine.newBuilder().recordStats() + .maximumSize(cache.getMaxSize()) + .build() + )); + } + cacheManager.setCaches(caffeineCaches); + return cacheManager; + + } + + /*@Bean(value = "defaultCache") + public Cache<String,Object> defaultCache(){ + return Caffeine.newBuilder().recordStats() + .maximumSize(Caches.defaultCache.getMaxSize()) + .build(); + } + + @Bean(value = "defaultCache2Exp") + public Cache<String,Object> defaultCache2Exp(){ + return Caffeine.newBuilder().recordStats() + .maximumSize(Caches.defaultCache2Exp.getMaxSize()) + .expireAfterWrite(Caches.defaultCache2Exp.ttl, TimeUnit.HOURS) + .build(); + }*/ + +} diff --git a/src/main/java/com/whyc/config/ShiroConfig.java b/src/main/java/com/whyc/config/ShiroConfig.java new file mode 100644 index 0000000..4323ba8 --- /dev/null +++ b/src/main/java/com/whyc/config/ShiroConfig.java @@ -0,0 +1,124 @@ +package com.whyc.config; + +import com.whyc.constant.YamlProperties; +import com.whyc.filter.RolesOrAuthorizationFilter; +import com.whyc.properties.PropertiesUtil; +import com.whyc.realm.CustomRealm; +import org.apache.shiro.session.mgt.SessionManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.apache.shiro.web.servlet.Cookie; +import org.apache.shiro.web.servlet.ShiroHttpSession; +import org.apache.shiro.web.servlet.SimpleCookie; +import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; + +import javax.servlet.Filter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 鏆傛椂鎻愪緵鏉冮檺绠$悊,浼氳瘽绠$悊鍚庣画鏇存柊 TODO + */ +@Configuration +//@Log4j2 +@DependsOn("yamlProperties") +public class ShiroConfig { + + @Autowired + CustomRealm customRealm; + + public SessionManager sessionManager() { + DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); + Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME); + cookie.setHttpOnly(false); + cookie.setSameSite(Cookie.SameSiteOptions.NONE); + cookie.setSecure(true); + cookie.setName("MSManager"); + sessionManager.setSessionIdCookie(cookie); + sessionManager.setSessionIdCookieEnabled(true); + sessionManager.setSessionIdUrlRewritingEnabled(true); + + return sessionManager; + } + + + /**鏉冮檺绠$悊鍣�*/ + @Bean(name = "securityManager") + public DefaultWebSecurityManager defaultWebSecurityManager(){ + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + securityManager.setRealm(customRealm); + if(YamlProperties.runModel == 1){ + securityManager.setSessionManager(sessionManager()); + } + return securityManager; + } + + /** + * 淇濊瘉瀹炵幇Shiro鍐呴儴lifecycle鍑芥暟鐨刡ean鎵ц + */ + @Bean(name = "lifecycleBeanPostProcessor") + public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor(){ + return new LifecycleBeanPostProcessor(); + } + + /**AOP寮忔柟娉曠骇鏉冮檺妫�楠�*/ + @Bean + @DependsOn("lifecycleBeanPostProcessor") + public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){ + DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); + advisorAutoProxyCreator.setProxyTargetClass(true); + return advisorAutoProxyCreator; + } + + /**閰嶅悎DefaultAdvisorAutoProxyCreator 娉ㄨВ鏉冮檺鏍¢獙*/ + @Bean + public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(){ + AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor(); + aasa.setSecurityManager(defaultWebSecurityManager()); + return aasa; + } + + /**杩囨护鍣ㄩ摼*/ + private Map<String, String> filterChainDefinition(){ + List<Object> list = PropertiesUtil.propertiesShiro.getKeyList(); + Map<String, String> map = new LinkedHashMap<>(); + for (Object object : list) { + String key = object.toString(); + String value = PropertiesUtil.getShiroValue(key); + //log.info("璇诲彇闃叉鐩楅摼鎺у埗锛�---key{},---value:{}",key,value); + map.put(key, value); + } + return map; + } + + /**鑷畾涔夎繃婊ゅ櫒*/ + private Map<String, Filter> filters(){ + HashMap<String, Filter> map = new HashMap<>(); + map.put("rolesOr",new RolesOrAuthorizationFilter()); + return map; + } + + /**杩囨护鍣�*/ +// @Bean("shiroFilter") + @Bean + public ShiroFilterFactoryBean shiroFilterFactoryBean(){ + ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); + //娉ㄥ叆鏂板畾涔夌殑杩囨护鍣� + shiroFilter.setFilters(filters()); + shiroFilter.setSecurityManager(defaultWebSecurityManager()); + shiroFilter.setFilterChainDefinitionMap(filterChainDefinition()); + shiroFilter.setLoginUrl("/login.html"); + //shiroFilter.setLoginUrl("/index.html#login"); + shiroFilter.setUnauthorizedUrl("/login/unauthorized"); + return shiroFilter; + } +} diff --git a/src/main/java/com/whyc/constant/OperationLogEnum.java b/src/main/java/com/whyc/constant/OperationLogEnum.java new file mode 100644 index 0000000..4311883 --- /dev/null +++ b/src/main/java/com/whyc/constant/OperationLogEnum.java @@ -0,0 +1,50 @@ +package com.whyc.constant; + +/** + * 瀹¤鏃ュ織/鎿嶄綔鏃ュ織 鎿嶄綔绫诲瀷瀹氫箟 + */ +public enum OperationLogEnum { + TYPE_1_SYS(10,"绯荤粺绾т簨浠�"), + TYPE_1_SERVICE(20,"涓氬姟绾т簨浠�"), + + //瀛愮骇鍒�-绯荤粺绾� + TYPE_2_LOGIN(101,"鐢ㄦ埛鐧诲綍"), + TYPE_2_LOGIN_FAIL(102,"鐢ㄦ埛鐧诲綍澶辫触"), + TYPE_2_LOGOUT(103,"鐢ㄦ埛閫�鍑�"), + TYPE_2_USER_UPDATE(104,"鐢ㄦ埛淇℃伅淇敼"), + TYPE_2_USER_ADD(105,"鐢ㄦ埛淇℃伅澧炲姞"), + TYPE_2_USER_DELETE(106,"鐢ㄦ埛淇℃伅鍒犻櫎"), + TYPE_2_USER_UPDATE_PASSWORD(107,"瀵嗙爜閲嶇疆"), + TYPE_2_UNAUTHORIZED_ACCESS(108,"瓒婃潈璁块棶"), + TYPE_2_CONNECTION_TIMEOUT(109,"杩炴帴瓒呮椂"), + TYPE_2_EXCEPTION(110,"璋冪敤寮傚父"), + + //瀛愮骇鍒�-涓氬姟绾� + TYPE_2_POWER_UPDATE(201,"鐢垫簮璁惧璁剧疆"), + TYPE_2_BATTERY_UPDATE(202,"鏍稿璁惧淇℃伅鐩稿叧璁剧疆"), + TYPE_2_BATTERY_TEST_PARAM_UPDATE(203,"鏍稿璁惧閬ヨ皟閬ユ帶"), + TYPE_2_ALARM(204,"鍛婅鐩稿叧璁剧疆"), + TYPE_2_BREAKER(205,"鏂矾鍣ㄤ俊鎭浉鍏虫搷浣�"), + TYPE_2_BREAKER_CONTROL(206,"鏂矾鍣ㄦ帶鍒剁浉鍏虫搷浣�"), + TYPE_2_GATEWAY(207,"缃戝叧鐩稿叧鎿嶄綔"), + TYPE_2_POWER_MODE_CONTROL(208,"鐢垫簮璁惧妯″潡鎺у埗鎿嶄綔"), + TYPE_2_POWER_MODE_PARAM(209,"鐢垫簮璁惧妯″潡鍙傛暟鎿嶄綔"), + + ; + + private Integer type; + private String name; + + OperationLogEnum(Integer type, String name) { + this.type = type; + this.name = name; + } + + public Integer getType() { + return type; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/whyc/constant/YamlProperties.java b/src/main/java/com/whyc/constant/YamlProperties.java index 4d17866..b2c8633 100644 --- a/src/main/java/com/whyc/constant/YamlProperties.java +++ b/src/main/java/com/whyc/constant/YamlProperties.java @@ -22,41 +22,55 @@ public static Integer systemType; /**浜鸿劯璇嗗埆瀵规瘮闃堝��*/ - public static Float faceThreshold; + //public static Float faceThreshold; /**鍛婅鐭俊寮�鍏�*/ - public static String messageSwitch; + /* public static String messageSwitch; public static String messageSecretId; public static String messageSecretKey; public static String messageRegion; public static String messageSdkAppId; public static String messageSignName; - public static String messageTemplateId; - public static String appId4Win; + public static String messageTemplateId;*/ + /* public static String appId4Win; public static String sdkKey4Win; public static String appId4Linux; - public static String sdkKey4Linux; - public static String activeKey; - public static Integer faceType; + public static String sdkKey4Linux;*/ /**鍛婅宸ュ崟寮�鍏�*/ - public static String alarmTaskSwitch; + //public static String alarmTaskSwitch; /**绯荤粺杩愯妯″紡*/ public static Integer runModel; - /**鑷畾涔夊父閲�*/ - public static String fontDynamicCodeSwitch; + /**FTP淇℃伅*/ + /*public static String ftpIp; + public static Integer ftpPort; + public static String ftpUserName; + public static String ftpPassword;*/ + + /*====== 鑷畾涔変俊鎭� ======*/ + + /**璺ㄥ煙鐧藉悕鍗�*/ public static String allowedCORSDomainList; - public static String restartPasswd; - public static String publicKeyOld; - public static String privateKeyOld; + public static String publicKey; public static String privateKey; - public static String aesDefaultKey; - public static String aesIv; - public static String i18nLanguage; + @Value("${custom.rsa.publicKey}") + public void setPublicKey(String publicKey) { + YamlProperties.publicKey = publicKey; + } + + @Value("${custom.rsa.privateKey}") + public void setPrivateKey(String privateKey) { + YamlProperties.privateKey = privateKey; + } + + @Value("${custom.cors}") + public void setAllowedCORSDomainList(String allowedCORSDomainList) { + YamlProperties.allowedCORSDomainList = allowedCORSDomainList; + } @Value("${spring.profiles.active}") public void setProfileType(String profileType) { YamlProperties.profileType = profileType; @@ -66,23 +80,25 @@ public void setSystemType(Integer systemType) { YamlProperties.systemType = systemType; } - - /* @Value("${custom.face.threshold}") +/* + @Value("${custom.face.threshold}") private void setFaceThreshold(Float faceThreshold) { YamlProperties.faceThreshold = faceThreshold; - } - - @Value("${custom.message.switch}") + }*/ +/* + @Value("${custom.message.switch}") private void setMessageSwitch(String messageSwitch) { YamlProperties.messageSwitch = messageSwitch; - } + }*/ +/* @Value("${custom.message.secret_id}") private void setMessageSecretId(String messageSecretId) { YamlProperties.messageSecretId = messageSecretId; } +*/ - @Value("${custom.message.secret_key}") + /*@Value("${custom.message.secret_key}") private void setMessageSecretKey(String messageSecretKey) { YamlProperties.messageSecretKey = messageSecretKey; } @@ -105,14 +121,14 @@ @Value("${custom.message.templateId}") private void setMessageTemplateId(String messageTemplateId) { YamlProperties.messageTemplateId = messageTemplateId; - } + }*/ - @Value("${custom.alarm.task.switch}") + /* @Value("${custom.alarm.task.switch}") private void setAlarmTaskSwitch(String alarmTaskSwitch) { YamlProperties.alarmTaskSwitch = alarmTaskSwitch; } - - @Value("${custom.face.appId4Win}") +*/ + /*@Value("${custom.face.appId4Win}") private void setAppId4Win(String appId4Win) { YamlProperties.appId4Win = appId4Win; } @@ -130,70 +146,32 @@ @Value("${custom.face.sdkKey4Linux}") private void setSdkKey4Linux(String sdkKey4Linux) { YamlProperties.sdkKey4Linux = sdkKey4Linux; - } - - @Value("${custom.face.activeKey}") - private void setActiveKey(String activeKey) { - YamlProperties.activeKey = activeKey; - } - - @Value("${custom.face.type}") - public void setFaceType(Integer faceType) { - YamlProperties.faceType = faceType; - } -*/ - @Value("${custom.fontDynamicCode}") - public void setFontDynamicCodeSwitch(String fontDynamicCodeSwitch) { - YamlProperties.fontDynamicCodeSwitch = fontDynamicCodeSwitch; - } + }*/ @Value("${configFile.type}") public void setRunModel(Integer runModel) { YamlProperties.runModel = runModel; } - @Value("${custom.cors}") - public void setAllowedCORSDomainList(String allowedCORSDomainList) { - YamlProperties.allowedCORSDomainList = allowedCORSDomainList; + /*@Value("${ftpInforMation.ftpIp}") + public void setFtpIp(String ftpIp){ + YamlProperties.ftpIp=ftpIp; } - @Value("${custom.restartPasswd}") - public void setRestartPasswd(String restartPasswd) { - YamlProperties.restartPasswd = restartPasswd; + @Value("${ftpInforMation.ftpPort}") + public void setFtpPort(Integer ftpPort){ + YamlProperties.ftpPort=ftpPort; } - @Value("${custom.rsa.publicKeyOld}") - public void setPublicKeyOld(String publicKeyOld) { - YamlProperties.publicKeyOld = publicKeyOld; + @Value("${ftpInforMation.ftpUserName}") + public void setFtpUserName(String ftpUserName){ + YamlProperties.ftpUserName=ftpUserName; } - @Value("${custom.rsa.privateKeyOld}") - public void setPrivateKeyOld(String privateKeyOld) { - YamlProperties.privateKeyOld = privateKeyOld; - } + @Value("${ftpInforMation.ftpPassword}") + public void setFtpPassword(String ftpPassword){ + YamlProperties.ftpPassword=ftpPassword; + }*/ - @Value("${custom.rsa.publicKey}") - public void setPublicKey(String publicKey) { - YamlProperties.publicKey = publicKey; - } - @Value("${custom.rsa.privateKey}") - public void setPrivateKey(String privateKey) { - YamlProperties.privateKey = privateKey; - } - - @Value("${custom.aes.defaultKey}") - public void setAesDefaultKey(String aesDefaultKey) { - YamlProperties.aesDefaultKey = aesDefaultKey; - } - - @Value("${custom.aes.iv}") - public void setAesIv(String aesIv) { - YamlProperties.aesIv = aesIv; - } - - @Value("${custom.i18n}") - public void setI18nLanguage(String i18nLanguage) { - YamlProperties.i18nLanguage = i18nLanguage; - } } diff --git a/src/main/java/com/whyc/controller/IndexController.java b/src/main/java/com/whyc/controller/IndexController.java new file mode 100644 index 0000000..f27ed9b --- /dev/null +++ b/src/main/java/com/whyc/controller/IndexController.java @@ -0,0 +1,26 @@ +package com.whyc.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Controller +@Api(tags = "index") +public class IndexController { + + @RequestMapping("/") + @ApiOperation("榛樿璺宠浆,鏃犻渶璋冪敤") + public void index(HttpServletResponse response, HttpServletRequest request){ + try { + response.sendRedirect("/ms/index.html?n="+System.currentTimeMillis()); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/whyc/controller/LoginController.java b/src/main/java/com/whyc/controller/LoginController.java new file mode 100644 index 0000000..59e4e69 --- /dev/null +++ b/src/main/java/com/whyc/controller/LoginController.java @@ -0,0 +1,44 @@ +package com.whyc.controller; + + +import com.whyc.dto.Response; +import com.whyc.pojo.UserInf; +import com.whyc.service.UserInfService; +import com.whyc.util.UserUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@RequestMapping("login") +@RestController +@Api(tags = "鐧诲綍") +public class LoginController { + + @Autowired + private UserInfService service; + + + @PostMapping("login") + @ApiOperation(value ="鐧诲綍") + public Response login(@RequestParam String uname, String usnId, HttpServletRequest request){ + return service.login(uname,usnId,request); + } + + @ApiOperation(value = "淇敼瀵嗙爜") + @GetMapping("changeSnId") + public Response changeSnId(@RequestParam String oldSnId,@RequestParam String newSnId){ + UserInf uinf= UserUtil.getUser(); + return service.changeSnId(uinf.getUname(),oldSnId,newSnId); + } + + + @PostMapping("logout") + @ApiOperation(value ="閫�鍑虹櫥褰�") + public void logout(){ + service.logout(); + } + +} diff --git a/src/main/java/com/whyc/controller/OperationLogController.java b/src/main/java/com/whyc/controller/OperationLogController.java new file mode 100644 index 0000000..85cdbeb --- /dev/null +++ b/src/main/java/com/whyc/controller/OperationLogController.java @@ -0,0 +1,31 @@ +package com.whyc.controller; + +import com.whyc.dto.Response; +import com.whyc.pojo.OperationLog; +import com.whyc.service.OperationLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("operationLog") +@Api(tags = "鎿嶄綔鏃ュ織") +public class OperationLogController { + + @Autowired + private OperationLogService service; + + @PostMapping("getPage") + @ApiOperation("鍒嗛〉-鏌ヨ") + public Response getPage(@RequestBody OperationLog param){ + return service.getPage(param); + } + + @GetMapping("getTypes") + @ApiOperation("浜嬩欢绫诲瀷-鏌ヨ") + public Response getEnumTypes(){ + return service.getEnumTypes(); + } + +} diff --git a/src/main/java/com/whyc/controller/UserInfController.java b/src/main/java/com/whyc/controller/UserInfController.java new file mode 100644 index 0000000..0d4cd72 --- /dev/null +++ b/src/main/java/com/whyc/controller/UserInfController.java @@ -0,0 +1,65 @@ +package com.whyc.controller; + +import com.whyc.dto.Response; +import com.whyc.pojo.UserInf; +import com.whyc.service.UserInfService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@Api(tags = "鐢ㄦ埛绠$悊") +@RequestMapping("userInf") +public class UserInfController { + @Autowired + private UserInfService service; + + @ApiOperation(value = "鏌ヨ鎵�鏈夌敤鎴蜂俊鎭�",notes = "鎺掗櫎uid鍦�100浠ュ唴鐨�(100浠ュ唴榛樿鏄鐞嗗憳)") + @GetMapping("getAllUser") + public Response getAllUser(@RequestParam int pageCurr, @RequestParam int pageSize){ + return service.getAllUser(pageCurr,pageSize); + } + + @ApiOperation(value = "缂栬緫鐢ㄦ埛鏉冮檺鍜岀敤鎴峰悕") + @GetMapping("updateUser") + public Response updateUser(@RequestParam int uid,@RequestParam(required = false) String uname,@RequestParam(required = false) int udownloadRole){ + return service.updateUser(uid,uname,udownloadRole); + } + @ApiOperation(value = "鏂版坊鍔犵敤鎴蜂俊鎭�") + @PostMapping("addUser") + public Response addUser(@RequestBody UserInf uinf){ + return service.addUser(uinf); + } + @ApiOperation(value = "鍒犻櫎鐢ㄦ埛淇℃伅") + @GetMapping("deleteUser") + public Response deleteUser(@RequestParam int uid){ + return service.delUser(uid); + } + + @ApiOperation(value = "灏嗙敤鎴锋坊鍔犺嚦100~1000绠$悊鍛�") + @GetMapping("improveRole") + public Response improveRole(@RequestParam int uid){ + return service.improveRole(uid); + } + + @ApiOperation(value = "灏嗙鐞嗗憳鍙樻垚鏅�氱敤鎴�") + @GetMapping("dropRole") + public Response dropRole(@RequestParam int uid, HttpServletRequest request){ + return service.dropRole(uid,request); + } + + @GetMapping("getUserNameList") + @ApiOperation(tags = "鎿嶄綔鏃ュ織",value = "鎿嶄綔浜哄鍚�-鏌ヨ-鎿嶄綔鏃ュ織浣跨敤") + public Response getUserNameList(){ + return service.getUserNameList(); + } + + @GetMapping("resetSnId") + @ApiOperation(value = "閲嶇疆瀵嗙爜") + public Response resetSnId(@RequestParam int uid){ + return service.resetSnId( uid); + } +} diff --git a/src/main/java/com/whyc/filter/RolesOrAuthorizationFilter.java b/src/main/java/com/whyc/filter/RolesOrAuthorizationFilter.java new file mode 100644 index 0000000..71962dc --- /dev/null +++ b/src/main/java/com/whyc/filter/RolesOrAuthorizationFilter.java @@ -0,0 +1,36 @@ +package com.whyc.filter; + +import com.whyc.pojo.UserInf; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.CollectionUtils; +import org.apache.shiro.web.filter.authz.AuthorizationFilter; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.util.Set; + +/** + * 鑷畾涔夎繃婊よ鍒�,鍙渶瑕佸寘鍚煇涓鑹�,灏辨巿鏉� + */ +public class RolesOrAuthorizationFilter extends AuthorizationFilter { + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { + Subject subject = getSubject(request, response); + String[] rolesArray = (String[]) mappedValue; + + if (rolesArray == null || rolesArray.length == 0) { + return true; + } + + Set<String> roles = CollectionUtils.asSet(rolesArray); + + //鍒ゆ柇涓簅r + UserInf user = (UserInf) subject.getPrincipals().getPrimaryPrincipal(); + for (String role :roles){ + if (subject.hasRole(role)){ + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/whyc/mapper/DocUserMapper.java b/src/main/java/com/whyc/mapper/DocUserMapper.java new file mode 100644 index 0000000..992a4e4 --- /dev/null +++ b/src/main/java/com/whyc/mapper/DocUserMapper.java @@ -0,0 +1,14 @@ +package com.whyc.mapper; + +import com.whyc.pojo.UserInf; + +import java.util.List; + +public interface DocUserMapper extends CustomMapper<UserInf>{ + //鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + List<UserInf> getAllUser(UserInf userInf); + //鏌ヨ瀵嗙爜 + String selectSnId(String name); + //鏌ヨ鎵�鏈夌敤鎴�(鏉冮檺绠$悊鐢�) + List<UserInf> getAllDocUser(); +} diff --git a/src/main/java/com/whyc/mapper/OperationLogMapper.java b/src/main/java/com/whyc/mapper/OperationLogMapper.java new file mode 100644 index 0000000..19875e4 --- /dev/null +++ b/src/main/java/com/whyc/mapper/OperationLogMapper.java @@ -0,0 +1,7 @@ +package com.whyc.mapper; + +import com.whyc.mapper.CustomMapper; +import com.whyc.pojo.OperationLog; + +public interface OperationLogMapper extends CustomMapper<OperationLog> { +} diff --git a/src/main/java/com/whyc/mapper/UserInfMapper.java b/src/main/java/com/whyc/mapper/UserInfMapper.java new file mode 100644 index 0000000..d92a400 --- /dev/null +++ b/src/main/java/com/whyc/mapper/UserInfMapper.java @@ -0,0 +1,26 @@ +package com.whyc.mapper; + +import com.whyc.mapper.CustomMapper; +import com.whyc.pojo.UserInf; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface UserInfMapper extends CustomMapper<UserInf> { + //鏌ヨ瀵嗙爜 + String selectSnId(String uname); + //鍒ゆ柇鏄惁瀛樺湪鏅�氱敤鎴�(uid>100)锛岃嫢鏃�,鍒濆涓�1001 + int judgeUname(); + //鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + List<UserInf> getAllUser(); + //鏌ヨ100~1000涓渶澶х殑uid + String getIn1000(); + //鍒涘缓100~1000鐨刬d琛�,涓嶅瓨鍦ㄥ垯鍒涘缓 + void createNumber(); + //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� + String existTable(); + //鎻掑叆榛樿鏁版嵁 + void setUnumber(@Param("sql") String sql); + //鏌ヨ鏈�澶х殑uid + String getMaxUid(); +} diff --git a/src/main/java/com/whyc/pojo/OperationLog.java b/src/main/java/com/whyc/pojo/OperationLog.java new file mode 100644 index 0000000..4f5070d --- /dev/null +++ b/src/main/java/com/whyc/pojo/OperationLog.java @@ -0,0 +1,39 @@ +package com.whyc.pojo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 瀹¤鏃ュ織/鎿嶄綔鏃ュ織 + */ +@Data +@TableName(schema = "db_user",value = "operation_log") +public class OperationLog { + + private Integer id; + private Integer userId; + private String userName; + private Integer type1; + private Integer type2; + private String msg; + private String detail; + private String ip; + private Date createTime; + + @TableField(exist = false) + private String type1Name; + @TableField(exist = false) + private String type2Name; + + @TableField(exist = false) + private Date startTime; + @TableField(exist = false) + private Date endTime; + @TableField(exist = false) + private Integer pageNum; + @TableField(exist = false) + private Integer pageSize; +} diff --git a/src/main/java/com/whyc/pojo/UserInf.java b/src/main/java/com/whyc/pojo/UserInf.java new file mode 100644 index 0000000..a00de25 --- /dev/null +++ b/src/main/java/com/whyc/pojo/UserInf.java @@ -0,0 +1,46 @@ +package com.whyc.pojo; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +/** + * <p> + * + * </p> + * + * @author lxw + * @since 2022-07-13 + */ +@Data +@ToString +@AllArgsConstructor +@NoArgsConstructor +@TableName(schema = "db_user",value = "user_inf") +@ApiModel(value="User瀵硅薄", description="") +public class UserInf implements Serializable { + + private static final long serialVersionUID = 1L; + + private int uid; + + @ApiModelProperty(value = "rsa鍔犲瘑瀵嗙爜") + private String usnid; + + @ApiModelProperty(value = "鐢ㄦ埛鍚�") + private String uname; + + @ApiModelProperty(value = "涓嬭浇鏉冮檺") + private int udownloadRole; + + public UserInf(int uid, String uname) { + this.uid = uid; + this.uname = uname; + } +} diff --git a/src/main/java/com/whyc/properties/LinkProperties.java b/src/main/java/com/whyc/properties/LinkProperties.java new file mode 100644 index 0000000..96d1ea7 --- /dev/null +++ b/src/main/java/com/whyc/properties/LinkProperties.java @@ -0,0 +1,146 @@ +package com.whyc.properties; + +import java.io.*; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Properties; + +/** + * @Description 鏈夊簭Properties绫� + */ + +public class LinkProperties extends Properties{ + + /** serialVersionUID */ + private static final long serialVersionUID = 7573016303908223266L; + + private List<Object> keyList = new ArrayList<Object>(); + + /** + * 榛樿鏋勯�犳柟娉� + */ + public LinkProperties() { + + } + + /** + * 浠庢寚瀹氳矾寰勫姞杞戒俊鎭埌Properties + * @param path + */ + public LinkProperties(String path) { + try { + InputStream is = new FileInputStream(path); + this.load(is); + } catch (FileNotFoundException e) { + e.printStackTrace(); + throw new RuntimeException("鎸囧畾鏂囦欢涓嶅瓨鍦紒"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 閲嶅啓put鏂规硶锛屾寜鐓roperty鐨勫瓨鍏ラ『搴忎繚瀛榢ey鍒発eyList锛岄亣鍒伴噸澶嶇殑鍚庤�呭皢瑕嗙洊鍓嶈�呫�� + */ + @Override + public synchronized Object put(Object key, Object value) { + this.removeKeyIfExists(key); + keyList.add(key); + return super.put(key, value); + } + + + /** + * 閲嶅啓remove鏂规硶锛屽垹闄ゅ睘鎬ф椂娓呴櫎keyList涓搴旂殑key銆� + */ + @Override + public synchronized Object remove(Object key) { + this.removeKeyIfExists(key); + return super.remove(key); + } + + /** + * keyList涓瓨鍦ㄦ寚瀹氱殑key鏃跺垯灏嗗叾鍒犻櫎 + */ + private void removeKeyIfExists(Object key) { + keyList.remove(key); + } + + /** + * 鑾峰彇Properties涓璳ey鐨勬湁搴忛泦鍚� + * @return + */ + public List<Object> getKeyList() { + return keyList; + } + + /** + * 淇濆瓨Properties鍒版寚瀹氭枃浠讹紝榛樿浣跨敤UTF-8缂栫爜 + * @param path 鎸囧畾鏂囦欢璺緞 + */ + public void store(String path) { + this.store(path, "UTF-8"); + } + + /** + * 淇濆瓨Properties鍒版寚瀹氭枃浠讹紝骞舵寚瀹氬搴斿瓨鏀剧紪鐮� + * @param path 鎸囧畾璺緞 + * @param charset 鏂囦欢缂栫爜 + */ + public void store(String path, String charset) { + if (path != null && !"".equals(path)) { + try { + OutputStream os = new FileOutputStream(path); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, charset)); + this.store(bw, null); + bw.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + throw new RuntimeException("瀛樺偍璺緞涓嶈兘涓虹┖!"); + } + } + + /** + * 閲嶅啓keys鏂规硶锛岃繑鍥炴牴鎹甼eyList閫傞厤鐨凟numeration锛屼笖淇濇寔HashTable keys()鏂规硶鐨勫師鏈夎涔夛紝 + * 姣忔閮借皟鐢ㄨ繑鍥炰竴涓柊鐨凟numeration瀵硅薄锛屼笖鍜屼箣鍓嶇殑涓嶄骇鐢熷啿绐� + */ + @Override + public synchronized Enumeration<Object> keys() { + return new EnumerationAdapter<Object>(keyList); + } + + /** + * List鍒癊numeration鐨勯�傞厤鍣� + */ + private class EnumerationAdapter<T> implements Enumeration<T> { + private int index = 0; + private final List<T> list; + private final boolean isEmpty; + + public EnumerationAdapter(List<T> list) { + this.list = list; + this.isEmpty = list.isEmpty(); + } + + public boolean hasMoreElements() { + //isEmpty鐨勫紩鍏ユ槸涓轰簡鏇磋创杩慔ashTable鍘熸湁鐨勮涔夛紝鍦℉ashTable涓坊鍔犲厓绱犲墠璋冪敤鍏秌eys()鏂规硶鑾峰緱涓�涓狤numeration鐨勫紩鐢紝 + //涔嬪悗寰�HashTable涓坊鍔犳暟鎹悗锛岃皟鐢ㄤ箣鍓嶈幏鍙栧埌鐨凟numeration鐨刪asMoreElements()灏嗚繑鍥瀎alse锛屼絾濡傛灉姝ゆ椂閲嶆柊鑾峰彇涓�涓� + //Enumeration鐨勫紩鐢紝鍒欐柊Enumeration鐨刪asMoreElements()灏嗚繑鍥瀟rue锛岃�屼笖涔嬪悗瀵笻ashTable鏁版嵁鐨勫銆佸垹銆佹敼閮芥槸鍙互鍦� + //nextElement涓幏鍙栧埌鐨勩�� + return !isEmpty && index < list.size(); + } + + public T nextElement() { + if (this.hasMoreElements()) { + return list.get(index++); + } + return null; + } + + } +} diff --git a/src/main/java/com/whyc/properties/PropertiesUtil.java b/src/main/java/com/whyc/properties/PropertiesUtil.java new file mode 100644 index 0000000..caea098 --- /dev/null +++ b/src/main/java/com/whyc/properties/PropertiesUtil.java @@ -0,0 +1,38 @@ +package com.whyc.properties; + +import lombok.extern.log4j.Log4j2; + +/** + * @Description 璇诲彇Properties鐨勫伐鍏风被 + */ +@Log4j2 +public class PropertiesUtil { + + public static LinkProperties propertiesShiro = new LinkProperties(); + + /** + * 璇诲彇properties閰嶇疆鏂囦欢淇℃伅 + */ + static { + /*String sysName = System.getProperty("sys.name"); + if (StringUtils.isEmpty(sysName)) { + sysName = "application.properties"; + } else { + sysName += ".properties"; + }*/ + try { + propertiesShiro.load(PropertiesUtil.class.getClassLoader() + .getResourceAsStream("config/authentication.properties")); + } catch (Exception e) { + log.warn("璧勬簮璺緞涓笉瀛樺湪authentication.properties鏉冮檺鏂囦欢锛屽拷鐣ヨ鍙栵紒"); + } + } + + /** + * 鏍规嵁key寰楀埌value鐨勫�� + */ + public static String getShiroValue(String key) { + return propertiesShiro.getProperty(key); + } + +} diff --git a/src/main/java/com/whyc/realm/CustomRealm.java b/src/main/java/com/whyc/realm/CustomRealm.java new file mode 100644 index 0000000..ab5abd1 --- /dev/null +++ b/src/main/java/com/whyc/realm/CustomRealm.java @@ -0,0 +1,55 @@ +package com.whyc.realm; + +import com.whyc.anotation.Realm; +import com.whyc.pojo.UserInf; +import com.whyc.service.UserBridgeService; +import com.whyc.util.RSAUtil; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; + +/** + * 瀹為檯澶勭悊璁よ瘉鎺堟潈,璺熸暟鎹簱浜や簰 + */ +@Realm +public class CustomRealm extends AuthorizingRealm { + + /**蹇呴』@Lazy娉ㄨВ,@Lazy涓嶡Autowired缁勫悎,浣垮緱渚濊禆浜嶴ervice鐩稿叧鐨凚ean閮芥槸lazy-resolution proxy*/ + @Lazy + @Autowired + UserBridgeService userBridgeService; + + /** + * 璁よ瘉 + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + String userName = (String) authenticationToken.getPrincipal(); + UserInf user = userBridgeService.findPasswordByUserName(userName); + if(user.getUid()==0){ + throw new UnknownAccountException("璐﹀彿涓嶅瓨鍦�"); + } + String password = RSAUtil.decrypt(user.getUsnid(),RSAUtil.getPrivateKey()); + return new SimpleAuthenticationInfo(user,password,getName()); + } + + /** + * 鎺堟潈 + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + UserInf user = (UserInf) principalCollection.getPrimaryPrincipal(); + return userBridgeService.getAuthorizationInfo(user); + } + + /**鍔犲瘑*//* + @PostConstruct + public void initCredentialsMatcher() { + HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(SuperConstant.HASH_ALGORITHM_MD5); + matcher.setHashIterations(SuperConstant.HASH_INTEGRATIONS_ONE); + setCredentialsMatcher(matcher); + }*/ +} diff --git a/src/main/java/com/whyc/service/OperationLogService.java b/src/main/java/com/whyc/service/OperationLogService.java new file mode 100644 index 0000000..0e3b272 --- /dev/null +++ b/src/main/java/com/whyc/service/OperationLogService.java @@ -0,0 +1,136 @@ +package com.whyc.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.whyc.constant.OperationLogEnum; +import com.whyc.dto.Response; +import com.whyc.mapper.OperationLogMapper; +import com.whyc.pojo.OperationLog; +import com.whyc.pojo.UserInf; +import com.whyc.util.HttpUtil; +import com.whyc.util.UserUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class OperationLogService { + + @Resource + private OperationLogMapper mapper; + + + public void record(Integer type1, Integer type2, String msg, String detail) { + OperationLog log = new OperationLog(); + UserInf user = UserUtil.getUser(); + log.setUserId(user.getUid()); + log.setUserName(user.getUname()); + log.setType1(type1); + log.setType2(type2); + log.setMsg(msg); + log.setDetail(detail); + log.setIp(HttpUtil.getRequest().getRemoteAddr()); + log.setCreateTime(new Date()); + mapper.insert(log); + } + + public void record(Integer type1, Integer type2, String msg, String detail,String remoteIp) { + OperationLog log = new OperationLog(); + UserInf user = UserUtil.getUser(); + log.setUserId(user.getUid()); + log.setUserName(user.getUname()); + log.setType1(type1); + log.setType2(type2); + log.setMsg(msg); + log.setDetail(detail); + log.setIp(remoteIp); + log.setCreateTime(new Date()); + mapper.insert(log); + } + + + public Response getEnumTypes() { + Map<OperationLog, List<OperationLog>> map = new HashMap<>(); + OperationLogEnum[] instances = OperationLogEnum.values(); + for (OperationLogEnum instance : instances) { + Set<OperationLog> type1Logs = map.keySet(); + //涓や綅鏁颁负涓�绾�,闈炰袱浣嶆暟涓轰簩绾� + Integer type = instance.getType(); + String name = instance.getName(); + if(type.toString().length() == 2){ //涓�绾� + OperationLog log = new OperationLog(); + log.setType1(type); + log.setType1Name(name); + map.put(log,new LinkedList<>()); + }else{ //浜岀骇 + for (OperationLog type1Log : type1Logs) { + if(type.toString().startsWith(type1Log.getType1().toString())){ + List<OperationLog> type2Logs = map.get(type1Log); + OperationLog type2Log = new OperationLog(); + type2Log.setType2(type); + type2Log.setType2Name(name); + type2Logs.add(type2Log); + } + } + } + } + return new Response().set(1,map); + } + + public Response getPage(OperationLog param) { + Integer pageNum = param.getPageNum(); + Integer pageSize = param.getPageSize(); + PageHelper.startPage(pageNum,pageSize); + QueryWrapper<OperationLog> query = Wrappers.query(); + if(param.getUserName() != null){ + query.eq("user_name",param.getUserName()); + } + if(param.getType1() != null){ + query.eq("type1",param.getType1()); + } + if(param.getType2() != null){ + query.eq("type2",param.getType2()); + } + if(param.getStartTime() != null) { + query.ge("create_time", param.getStartTime()); + } + if(param.getEndTime() != null) { + query.le("create_time", param.getEndTime()); + } + query.orderByDesc("id"); + List<OperationLog> operationLogs = mapper.selectList(query); + injectTypeName(operationLogs); + PageInfo<OperationLog> pageInfo = new PageInfo<>(operationLogs); + return new Response().set(1,pageInfo); + } + + /**娉ㄥ叆type鍊煎搴旂殑name*/ + private void injectTypeName(List<OperationLog> operationLogs) { + for (OperationLog log : operationLogs) { + Integer type1 = log.getType1(); + Integer type2 = log.getType2(); + + Map<OperationLog, List<OperationLog>> logConstantMap = (Map<OperationLog, List<OperationLog>>) getEnumTypes().getData(); + Set<OperationLog> type1Set = logConstantMap.keySet(); + + for (OperationLog temp : type1Set) { + if(type1 == temp.getType1().intValue()){ + //娉ㄥ叆type1浜嬩欢绫诲瀷 + log.setType1Name(temp.getType1Name()); + //娉ㄥ叆type2浜嬩欢绫诲瀷 + List<OperationLog> type2List = logConstantMap.get(temp); + for (OperationLog temp2 : type2List) { + if(type2 == temp2.getType2().intValue()){ + log.setType2Name(temp2.getType2Name()); + break; + } + } + break; + } + } + } + } +} diff --git a/src/main/java/com/whyc/service/UserBridgeService.java b/src/main/java/com/whyc/service/UserBridgeService.java new file mode 100644 index 0000000..c9e8ed9 --- /dev/null +++ b/src/main/java/com/whyc/service/UserBridgeService.java @@ -0,0 +1,76 @@ +package com.whyc.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.whyc.mapper.DocUserMapper; +import com.whyc.pojo.UserInf; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.springframework.cache.CacheManager; +import org.springframework.context.annotation.DependsOn; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 澶勭悊 shiro璁よ瘉,鎺堟潈,鍜屾暟鎹簱浜や簰 + */ +@Service +//Unified Naming +//@CacheConfig(cacheNames ={"userBridge"}) +@DependsOn("caffeineCacheManager") +public class UserBridgeService { + + @Resource + private DocUserMapper userMapper; + + @Resource + private CacheManager caffeineCacheManager; + + public UserInf findPasswordByUserName(String userName) { + UserInf userInf = null; + QueryWrapper<UserInf> queryWrapper = Wrappers.query(); + queryWrapper.select("uid","uname","usnid","udownload_role").eq("uname",userName); + userInf = userMapper.selectOne(queryWrapper); + + return userInf==null?new UserInf(0,"鐢ㄦ埛涓嶅瓨鍦�"):userInf; + } + +/* public UserInf findUserByMobilephone(String mobilephone){ + QueryWrapper<UserInf> queryWrapper = Wrappers.query(); + queryWrapper.select("uId","uName","upassword","UKey_ID","uRole","uMobilephone").eq("uMobilephone",mobilephone); + List<UserInf> list = userMapper.selectList(queryWrapper); + return list.size()==0?new UserInf(0,"鐢ㄦ埛涓嶅瓨鍦�"):list.get(0); + }*/ + + /** + * TODO 閲囩敤caffeineCache閲嶅啓 + * @param user + * @return + */ + //@Cacheable(key = "#root.methodName+#p0.id") + public AuthorizationInfo getAuthorizationInfo(UserInf user) { + System.out.println("=========鎵ц浜哢serBridgeService.getAuthorization鏂规硶=========="); + SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); + /*//娣诲姞Roles鍜孭ermissions + List<String> roles = findRolesByUserId(user.getId()); + List<String> perms = findPermissionsByUserId(user.getId()); + + authorizationInfo.addRoles(roles); + authorizationInfo.addStringPermissions(perms);*/ + return authorizationInfo; + } + + private List<String> findPermissionsByUserId(Long userId) { + /* List<String> perms = rolePermissionMapper.findPermissionsByUserId(userId); + return perms;*/ + return null; + } + + private List<String> findRolesByUserId(Long userId) { + //List<String> roles =userRoleMapper.findRolesByUserId(userId); + //roles.add("dev"); + return null; + } +} diff --git a/src/main/java/com/whyc/service/UserInfService.java b/src/main/java/com/whyc/service/UserInfService.java new file mode 100644 index 0000000..64a83fa --- /dev/null +++ b/src/main/java/com/whyc/service/UserInfService.java @@ -0,0 +1,227 @@ +package com.whyc.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.whyc.dto.Response; +import com.whyc.mapper.UserInfMapper; +import com.whyc.pojo.UserInf; +import com.whyc.util.MD5Util; +import com.whyc.util.RSAUtil; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class UserInfService { + @Autowired(required = false) + private UserInfMapper mapper; + + //鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + public Response getAllUser( int pageCurr, int pageSize) { + PageHelper.startPage(pageCurr,pageSize); + List<UserInf> list=mapper.getAllUser(); + PageInfo pageInfo=new PageInfo(list); + return new Response().setII(1,list!=null,pageInfo,"鏁版嵁杩斿洖"); + } + //缂栬緫鏉冮檺 + public Response updateUser(int uid,String uname, int udownloadRole) { + UpdateWrapper wrapper=new UpdateWrapper(); + wrapper.set("udownload_role",udownloadRole); + if(uname!=null){ + wrapper.set("uname",uname); + } + wrapper.eq("uid",uid); + int bl=mapper.update(null,wrapper); + return new Response().set(1,bl>0); + } + + //鏂版坊鍔犵敤鎴蜂俊鎭� + public Response addUser(UserInf uinf) { + QueryWrapper wrapper=new QueryWrapper(); + //鍒ゆ柇鏄惁瀛樺湪鏅�氱敤鎴�(uid>100)锛岃嫢鏃�,鍒濆涓�1001 + int judgecount=mapper.judgeUname(); + if(judgecount==0){ + uinf.setUid(101); + } + String pwd= RSAUtil.encrypt("123456", RSAUtil.getPublicKey()); + uinf.setUsnid(pwd); + wrapper.eq("uname",uinf.getUname()); + List list=mapper.selectList(wrapper); + if(list!=null&&list.size()>0){ + return new Response().setII(1,false,list,"鐢ㄦ埛鍚嶅凡瀛樺湪"); + } + int bl=mapper.insert(uinf); + return new Response().set(1,bl>0); + } + //淇敼瀵嗙爜 + public Response changeSnId(String uname,String oldSnId, String newSnId) { + if(uname==null||uname.equals("")){ + return new Response().set(1,false,"鎵句笉鍒扮敤鎴�"); + } + //楠岃瘉鑰佸瘑鐮佹槸鍚︽纭� + String snIdRsa=mapper.selectSnId(uname); + //瑙e瘑 + String snId=RSAUtil.decrypt(snIdRsa,RSAUtil.getPrivateKey()); + String[] decOld=RSAUtil.decryptFrontP(oldSnId,RSAUtil.fontSeparator); + String oldId=decOld[0]; + String[] newOld=RSAUtil.decryptFrontP(newSnId,RSAUtil.fontSeparator); + String newId=newOld[0]; + if(oldId.equals(snId)){ + UpdateWrapper wrapper=new UpdateWrapper(); + wrapper.set("usnid",RSAUtil.encrypt(newId,RSAUtil.getPublicKey())); + wrapper.eq("uname",uname); + int flag=mapper.update(null,wrapper); + return new Response().set(1,flag>0,flag>0?"淇敼鎴愬姛":"淇敼澶辫触"); + }else { + return new Response().set(1,false,"鍘熷瘑鐮佷笉姝g‘"); + } + } + //閲嶇疆瀵嗙爜 + public Response resetSnId(int uid ) { + UpdateWrapper wrapper=new UpdateWrapper(); + wrapper.set("usnid",RSAUtil.encrypt("123456",RSAUtil.getPublicKey())); + wrapper.eq("uid",uid); + int flag=mapper.update(null,wrapper); + return new Response().set(1,flag>0,flag>0?"淇敼鎴愬姛":"淇敼澶辫触"); + + } + //鍒犻櫎鐢ㄦ埛淇℃伅 + public Response delUser(int uid) { + UpdateWrapper wrapper=new UpdateWrapper(); + wrapper.eq("uid",uid); + int bl=mapper.delete(wrapper); + return new Response().setII(1,bl>0,bl,"鍒犻櫎杩斿洖"); + } + + public Response login(String uname, String usnId, HttpServletRequest request) { + Response response = new Response(); + String[] dataArr = RSAUtil.decryptFrontP(usnId, RSAUtil.fontSeparator); + //楠岀md5 + if(dataArr[0]==null||dataArr[1]==null){ + return response.set(1, false, "瀵嗙爜楠岀澶辫触"); + } + if (!dataArr[1].equals(MD5Util.encryptMD5(org.apache.commons.lang3.StringUtils.trim(dataArr[0])))) { + return response.set(1, false, "瀵嗙爜楠岀澶辫触"); + } + UsernamePasswordToken userToken = new UsernamePasswordToken(uname, dataArr[0]); + Subject subject = SecurityUtils.getSubject(); + try { + subject.login(userToken); + } catch (Exception e) { + if(e instanceof UnknownAccountException){ + return response.set(1,false,"璐﹀彿涓嶅瓨鍦�"); + } + return response.set(1,false,"瀵嗙爜閿欒"); + } + //鐧诲綍鎴愬姛 + ServletContext servletContext = request.getServletContext(); + servletContext.setAttribute(uname, request.getSession().getId()); + //Session瀛樺偍褰撳墠鐢ㄦ埛鍙婃潈闄愮粍鍒楄〃 + UserInf userDB = (UserInf) subject.getPrincipal(); + userDB.setUsnid(null); + request.getSession().setAttribute("user", userDB); + return response.setII(1,true, userDB,"鐧诲綍鎴愬姛"); + } + + public void logout() { + Subject subject = SecurityUtils.getSubject(); + subject.logout(); + } + //灏嗙敤鎴锋坊鍔犺嚦100~1000绠$悊鍛� + public Response improveRole(int uid) { + //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� + String tableName = mapper.existTable(); + if(tableName==null){ + ///鍒涘缓100~1000鐨刬d琛�,涓嶅瓨鍦ㄥ垯鍒涘缓 + mapper.createNumber(); + //鎻掑叆榛樿鏁版嵁 + String sql=" INSERT INTO db_user.temp_numbers(unumber) " + + " VALUES "; + for(int i=101;i<=1000;i++){ + sql+="("+i+")"; + if(i!=1000){ + sql+=","; + } + } + mapper.setUnumber(sql); + } + String minUid=mapper.getIn1000(); + if(minUid==null){ + return new Response().set(1,false,"绠$悊鍛樹釜鏁拌秴杩囦笂闄�"); + } + UpdateWrapper wrapper =new UpdateWrapper(); + wrapper.set("uid",Integer.valueOf(minUid)); + wrapper.eq("uid",Integer.valueOf(uid)); + int flag= mapper.update(null,wrapper); + return new Response().set(1,flag>0,flag>0?"韬唤鍙樻洿鎴愬姛":"韬唤鍙樻洿澶辫触"); + } + //灏嗙鐞嗗憳鍙樻垚鏅�氱敤鎴� + public Response dropRole(int uid, HttpServletRequest request) { + //鏌ヨ鏈�澶х殑uid + String maxUid=mapper.getMaxUid(); + if(maxUid==null){ + maxUid="1001"; + } + //鏍规嵁鐢ㄦ埛id鏌ヨ鐢ㄦ埛淇℃伅 + QueryWrapper qWrapper=new QueryWrapper(); + qWrapper.eq("uid",uid); + qWrapper.last("limit 1"); + UserInf uinf=mapper.selectOne(qWrapper); + //缂栬緫 + UpdateWrapper wrapper =new UpdateWrapper(); + wrapper.set("uid",Integer.valueOf(maxUid)+1); + wrapper.eq("uid",uid); + int flag= mapper.update(null,wrapper); + //濡傛灉鏄櫘閫氱敤鎴疯嚜宸卞己閫�锛屽皢鐢ㄦ埛鍚嶅搴旂殑sessionId鍙樻洿 + ServletContext servletContext = request.getServletContext(); + servletContext.setAttribute(uinf.getUname(),"123456"); + return new Response().set(1,flag>0,flag>0?"韬唤鍙樻洿鎴愬姛":"韬唤鍙樻洿澶辫触"); + } + + public Response getUserNameList() { + QueryWrapper<UserInf> query = Wrappers.query(); + query.select("uname"); + List<String> userNameList = mapper.selectList(query).stream().map(UserInf::getUname).collect(Collectors.toList()); + return new Response().set(1,userNameList); + } + + //鐧诲綍妫�娴� + public Response checkUserWebSocket(HttpSession httpSession){ + Response model = new Response(); + try { + UserInf user = (UserInf) httpSession.getAttribute("user"); + if(user!=null){ + String sessionId = (String) httpSession.getServletContext().getAttribute(user.getUname()); + if(httpSession.getId().equals(sessionId)){ + model.set(1,user,null); + }else{ + if(sessionId.equals("123456")){ + model.set(1,false,"韬唤鏉冮檺鍙樻洿,璇烽噸鏂扮櫥褰�"); + }else{ + model.set(1,false,"涓嶅悓涓绘満鐧诲綍"); + } + //鐢ㄦ埛鍦ㄥ叾浠栦富鏈虹櫥褰�,寮鸿揩鐢ㄦ埛鍦ㄦ湰鏈虹殑session澶辨晥 + httpSession.invalidate(); + } + } + else { + model.set(1,false,"鐢ㄦ埛淇℃伅澶辨晥,璇烽噸鏂扮櫥褰�"); + } + }catch (Exception e){ + model.set(1,false,"鐧诲綍淇℃伅澶辨晥,閲嶆柊鐧诲綍"); + } + return model; + } +} diff --git a/src/main/java/com/whyc/util/HttpUtil.java b/src/main/java/com/whyc/util/HttpUtil.java new file mode 100644 index 0000000..b3f9f8d --- /dev/null +++ b/src/main/java/com/whyc/util/HttpUtil.java @@ -0,0 +1,97 @@ +package com.whyc.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonSyntaxException; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Type; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class HttpUtil { + + /* + * 鑾峰彇HttpServletRequest + */ + public static HttpServletRequest getRequest(){ + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = requestAttributes.getRequest(); + return request; + } + + /* + * 鑾峰彇HttpServletResponse + */ + public static HttpServletResponse getResponse(){ + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletResponse response = requestAttributes.getResponse(); + return response; + } + + /* + * 鑾峰彇HttpSession + */ + public static HttpSession getSession(){ + return getRequest().getSession(); + } + + /** + * + * @return 杩斿洖application + */ + public static ServletContext getApplication(){ + return getSession().getServletContext(); + } + + /* + * 鑾峰彇灏嗗璞¤浆鎹㈡垚json鏍煎紡 + */ + public static String toJson(Object obj){ + Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); + return gson.toJson(obj); + } + + public static String chageDateToString(Date time,String type){ + String msg = ""; + SimpleDateFormat sdf = new SimpleDateFormat(type); + msg = sdf.format(time); + return msg; + } + + + /** + * + * @param datetype 闇�瑕佽В鏋愮殑鏃ユ湡鐨勬牸寮忓锛�"yyyy-MM-dd HH:mm:ss" + * @return 寰楀埌瀵瑰簲鐨刧son瀵硅薄 + */ + public static Gson getGson(String datetype){ + return new GsonBuilder().setDateFormat(datetype).create(); + } + + /** + * 鑾峰彇榛樿鐨刧son瀵硅薄 + * @return + */ + public static Gson getGson(){ + return new Gson(); + } + + + public static <T> T getObject(String jsonstring,Type listtype){ + Gson gson=new Gson(); + T t=null; + try { + t=gson.fromJson(jsonstring, listtype); + } catch (JsonSyntaxException e) { + e.printStackTrace(); + } + return t; + } + +} diff --git a/src/main/java/com/whyc/util/JasyptUtils.java b/src/main/java/com/whyc/util/JasyptUtils.java new file mode 100644 index 0000000..6fe1249 --- /dev/null +++ b/src/main/java/com/whyc/util/JasyptUtils.java @@ -0,0 +1,69 @@ +package com.whyc.util; + + +import lombok.extern.slf4j.Slf4j; +import org.jasypt.properties.PropertyValueEncryptionUtils; +import org.jasypt.util.text.BasicTextEncryptor; + +import java.util.Objects; + +@Slf4j +public final class JasyptUtils { + + public static void main(String[] args) { + //String a = encrypt("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"); + //String a = encrypt("MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kneP5IdDr2Wqr5KFXt14DjRj7ytitrquvhF44n5QTt6Ty2wkmtzLXEw7VKimEl0ddfBI1tlaGclb0aUirVSboimWTAVz8C3Kh4kM/cQm1RmAjkfp9LPQE8sUefXwLQ3HPUGvXT1TTsOpB0yxqtwGYpdhDD7ahk7PQqkDlvQVrAgMBAAECgYA8ASdX4W2n6a4kKnRSleLqqg8aHazqAPvTinmAJqU65VW02SJ42yxyV3gFnTSErXfIfxviO3/U+0ruWiFVEwV5oDEh0dOd+HHGm4YzFXIRglMeRBgLuVJ+owzoVDwZstiIBa69DIjaJtmpSf5FjwxAth+gtCv3e11IXHraKN720QJBAMPMB1WtmpRGYHxWVYjKSL+RGw+h3gMQLk3exZjhmYRlXuqfVZ2Zol+NazDc59K5f+geMdJ0/X2kKnKLVjWzYHMCQQC7z1cFYswtLemxGfj+dwlVC01VL4pKa7HGHl/FAQ2UNYZY2d5hE/nXYbTpfI0gMowX926/aFpia7NbAUJO7WEpAkAyUFa+LJthaOhYazMVsK2bFKW4kabkcJ8Fga6TR73UaNxIPGOa2SUBmuylpM6ptuNoeYHiDBAr3ijOQIIJ0KuDAkBy9fPahCNe9F+73J4hhVPdDtIDdto7u7hSAX215XMeabUW5iXNXqDsSg6nbWolb0t50CemWoYZALwE1Lx1+7AhAkEAoZtFt+2skjAxHEqNUye4vKBqB2Ng/wmfitCfT34lXWQsxs4BGk/8eQMzkam9bcB7FcinolxHF/1UjsUYpI+AgA=="); + String a = encrypt("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpJ3j+SHQ69lqq+ShV7deA40Y+8rYra6rr4ReOJ+UE7ek8tsJJrcy1xMO1SophJdHXXwSNbZWhnJW9GlIq1Um6IplkwFc/AtyoeJDP3EJtUZgI5H6fSz0BPLFHn18C0Nxz1Br109U07DqQdMsarcBmKXYQw+2oZOz0KpA5b0FawIDAQAB"); + decrypt(a); + + } + + /** + * 鍔犲瘑浣跨敤瀵嗛挜 + */ + //private static final String PRIVATE_KEY = "hELEEWWEEr9Lu6HgEvttjj8vYhy3ID+PqPbumuXhcHhe"; + + private static BasicTextEncryptor basicTextEncryptor = new BasicTextEncryptor(); + + static { + basicTextEncryptor.setPassword(Objects.requireNonNull(RSAUtil.decrypt("DF3lSrjXSHClZgQzagH0D038z1gCoG+FcZLPMZ93Ucz1MeNCN+J5iawqQKzMXusXPuHeygfuLSajiCNi8ad2F7H7lpL9FhzjH+2Q9d9d1H2xRe+ElHh0SC8aT4FHgrazhx73wn2MlxX8SIm2PvC8oBLXbM+7KQ4r5bNwiQl0uUOC7D9ONbYzQAy8zCkCBke+h4Q6b5SlGaGz2OswKJPe7Wjpsf/3hnUKV6KP+ACYfFry9Nq13Wb3nsPfjuMnwsmUe8sRxj77pIVmrbEIMaO12GJMJbErA0/1ZjfPkzH3YFZe/mmSOmHegM/jiXnnPemh+LRyZGrKF3Y19B8Cl1EMxp106ss8/7ypYiFn0XWb7gRQqfuqQ8zsU0lOWxCWuk2jyWKxBdftt3edDzmoROHJfllHRffgPZ/MPYg6C6JqBXz7Xqngb0mClwt7OQVSvTau+NdTlMoYdcULOTZqa8IJi4rtUMMnVdhj0Avpl6ekXBPeVcvWsqTpGoep5T0yQJ9M"))); + } + + /** + * 绉佹湁鏋勯�犳柟娉曪紝闃叉琚剰澶栧疄渚嬪寲 + */ + private JasyptUtils() { + } + + /** + * 鏄庢枃鍔犲瘑 + * + * @param plaintext 鏄庢枃 + * @return String + */ + public static String encrypt(String plaintext) { + log.info("鏄庢枃瀛楃涓蹭负锛歿}", plaintext); + // 浣跨敤鐨勫姞瀵嗙畻娉曞弬鑰�2.2鑺傚唴瀹癸紝涔熷彲浠ュ湪婧愮爜鐨勭被娉ㄩ噴涓湅鍒� + String ciphertext = basicTextEncryptor.encrypt(plaintext); + log.info("瀵嗘枃瀛楃涓蹭负锛歿}", ciphertext); + return ciphertext; + } + + /** + * 瑙e瘑 + * + * @param ciphertext 瀵嗘枃 + * @return String + */ + public static String decrypt(String ciphertext) { + log.info("瀵嗘枃瀛楃涓蹭负锛歿}", ciphertext); + ciphertext = "ENC(" + ciphertext + ")"; + if (PropertyValueEncryptionUtils.isEncryptedValue(ciphertext)) { + String plaintext = PropertyValueEncryptionUtils.decrypt(ciphertext, basicTextEncryptor); + log.info("鏄庢枃瀛楃涓蹭负锛歿}", plaintext); + return plaintext; + } + log.error("瑙e瘑澶辫触锛�"); + return ""; + } +} diff --git a/src/main/java/com/whyc/util/MD5Util.java b/src/main/java/com/whyc/util/MD5Util.java new file mode 100644 index 0000000..0dc3d03 --- /dev/null +++ b/src/main/java/com/whyc/util/MD5Util.java @@ -0,0 +1,47 @@ +package com.whyc.util; + +import org.apache.commons.codec.digest.DigestUtils; + +public class MD5Util { + + /**鍔犲瘑*/ + public static String encryptMD5(String data){ + String result=null; + if(data!=null && data.length()>0){ + result= DigestUtils.md5Hex(data); + } + return result; + } + + /** + * 浣跨敤timestamp+鐩愭柟寮�,杩涜绛惧悕楠岃瘉 + * 褰撳墠鏃堕棿鎴充负13浣嶆暟 + */ + public static boolean checkSignMD5(String time,String randomStr,String sign){ + String usefulNum = randomStr; + //鍔犵洂鏂瑰紡,鏍规嵁鏈熬鐨勫�艰繘琛屼笉鍚岀殑鍔犲瘑瑙勫垯 + char lastChar = time.charAt(12); + int lastNum = Integer.parseInt(String.valueOf(lastChar)); + switch (lastNum){ + //鍦ㄧ涓�浣嶅姞瀛楃涓� rd@c3doed + case 0: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3dozero");break; + case 1: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doenoe");break; + case 2: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doktwo");break; + case 3: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3dolthree");break; + case 4: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doexfour");break; + case 5: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doedefive");break; + case 6: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doedhsix");break; + case 7: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doedtseven");break; + case 8: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doedbeight");break; + case 9: usefulNum += time.replace(String.valueOf(lastChar),"rd@c3doedrnine");break; + } + //MD5鍔犲瘑鍚� + String signNow = encryptMD5(usefulNum); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 10; i++) { + sb.append(signNow.charAt(i * 2)); + } + String signResult = sb.append(signNow).toString(); + return sign.equals(signResult); + } +} diff --git a/src/main/java/com/whyc/util/RSAUtil.java b/src/main/java/com/whyc/util/RSAUtil.java new file mode 100644 index 0000000..14bda4b --- /dev/null +++ b/src/main/java/com/whyc/util/RSAUtil.java @@ -0,0 +1,280 @@ +package com.whyc.util; + +import com.whyc.constant.YamlProperties; +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import java.io.ByteArrayOutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.LinkedList; +import java.util.List; + +public class RSAUtil { + + /** + * 鍥哄畾鍏閽� + */ + private static final String publicKey = YamlProperties.publicKey; + private static final String privateKey = YamlProperties.privateKey; + /** + * RSA鏈�澶у姞瀵嗘槑鏂囧ぇ灏� + */ + private static final int MAX_ENCRYPT_BLOCK = 117; + /** + * RSA鏈�澶цВ瀵嗗瘑鏂囧ぇ灏� + */ + private static final int MAX_DECRYPT_BLOCK = 384; + + public static final String fontSeparator = "&&&&&&&&&&"; + /** + * 鑾峰彇瀵嗛挜瀵� + * + * @return 瀵嗛挜瀵� + */ + public static List<String> getKeyPair() throws Exception { + LinkedList<String> list = new LinkedList<>(); + KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); + generator.initialize(3072); + KeyPair keyPair = generator.generateKeyPair(); + String publicKey = Base64.encodeBase64String(keyPair.getPublic().getEncoded()); + String privateKey = Base64.encodeBase64String(keyPair.getPrivate().getEncoded()); + System.out.println("鍏挜:"+publicKey); + System.out.println("绉侀挜:"+privateKey); + list.add(publicKey); + list.add(privateKey); + return list; + } + /** + * 鑾峰彇绉侀挜 + * + * @param privateKey 绉侀挜瀛楃涓� + * @return + */ + public static PrivateKey getPrivateKey(String privateKey) { + try { + KeyFactory keyFactory = null; + keyFactory = KeyFactory.getInstance("RSA"); + + byte[] decodedKey = Base64.decodeBase64(privateKey.getBytes()); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodedKey); + return keyFactory.generatePrivate(keySpec); + }catch (NoSuchAlgorithmException | InvalidKeySpecException e){ + return null; + } + } + + /** + * 鑾峰彇绉侀挜 + * + * @return + */ + public static PrivateKey getPrivateKey() { + try { + KeyFactory keyFactory = null; + keyFactory = KeyFactory.getInstance("RSA"); + + byte[] decodedKey = Base64.decodeBase64(privateKey.getBytes()); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodedKey); + return keyFactory.generatePrivate(keySpec); + }catch (NoSuchAlgorithmException | InvalidKeySpecException e){ + return null; + } + } + /** + * 鑾峰彇鍏挜 + * + * @param publicKey 鍏挜瀛楃涓� + * @return + */ + public static PublicKey getPublicKey(String publicKey) throws Exception { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + byte[] decodedKey = Base64.decodeBase64(publicKey.getBytes()); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decodedKey); + return keyFactory.generatePublic(keySpec); + } + + /** + * 鑾峰彇鍏挜 + * + * @return + */ + public static PublicKey getPublicKey(){ + try { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + byte[] decodedKey = Base64.decodeBase64(publicKey.getBytes()); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decodedKey); + return keyFactory.generatePublic(keySpec); + }catch (Exception e){ + return null; + } + } + + /** + * RSA鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @param publicKey 鍏挜 + * @return + */ + public static String encrypt(String data, PublicKey publicKey) { + try { + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + int inputLen = data.getBytes().length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offset = 0; + byte[] cache; + int i = 0; + // 瀵规暟鎹垎娈靛姞瀵� + while (inputLen - offset > 0) { + if (inputLen - offset > MAX_ENCRYPT_BLOCK) { + cache = cipher.doFinal(data.getBytes(), offset, MAX_ENCRYPT_BLOCK); + } else { + cache = cipher.doFinal(data.getBytes(), offset, inputLen - offset); + } + out.write(cache, 0, cache.length); + i++; + offset = i * MAX_ENCRYPT_BLOCK; + } + byte[] encryptedData = out.toByteArray(); + out.close(); + // 鑾峰彇鍔犲瘑鍐呭浣跨敤base64杩涜缂栫爜,骞朵互UTF-8涓烘爣鍑嗚浆鍖栨垚瀛楃涓� + // 鍔犲瘑鍚庣殑瀛楃涓� + return new String(Base64.encodeBase64String(encryptedData)); + }catch (Exception e){ + return null; + } + } + /** + * RSA瑙e瘑 + * + * @param data 寰呰В瀵嗘暟鎹� + * @param privateKey 绉侀挜 + * @return + */ + public static String decrypt(String data, PrivateKey privateKey) { + try { + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] dataBytes = Base64.decodeBase64(data); + int inputLen = dataBytes.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offset = 0; + byte[] cache; + int i = 0; + // 瀵规暟鎹垎娈佃В瀵� + while (inputLen - offset > 0) { + if (inputLen - offset > MAX_DECRYPT_BLOCK) { + cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK); + } else { + cache = cipher.doFinal(dataBytes, offset, inputLen - offset); + } + out.write(cache, 0, cache.length); + i++; + offset = i * MAX_DECRYPT_BLOCK; + } + byte[] decryptedData = out.toByteArray(); + out.close(); + // 瑙e瘑鍚庣殑鍐呭 + return new String(decryptedData, "UTF-8"); + }catch (Exception e){ + return null; + } + } + /** + * RSA瑙e瘑 + * + * @param data 寰呰В瀵嗘暟鎹� + * @return + */ + public static String decrypt(String data) { + try { + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, getPrivateKey()); + byte[] dataBytes = Base64.decodeBase64(data); + int inputLen = dataBytes.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offset = 0; + byte[] cache; + int i = 0; + // 瀵规暟鎹垎娈佃В瀵� + while (inputLen - offset > 0) { + if (inputLen - offset > MAX_DECRYPT_BLOCK) { + cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK); + } else { + cache = cipher.doFinal(dataBytes, offset, inputLen - offset); + } + out.write(cache, 0, cache.length); + i++; + offset = i * MAX_DECRYPT_BLOCK; + } + byte[] decryptedData = out.toByteArray(); + out.close(); + // 瑙e瘑鍚庣殑鍐呭 + return new String(decryptedData, "UTF-8"); + }catch (Exception e){ + return null; + } + } + + /** + * 鍓嶇鍔犲瘑鏁版嵁RSA[鏄庢枃+MD5(鏄庢枃)]瑙e瘑涓烘槑鏂囧拰MD5[鏄庢枃] + * @param frontEncryptData + * @return + */ + public static String[] decryptFront(String frontEncryptData,String separatorStr){ + String[] dataArr = new String[2]; + String dataMD5Mix = RSAUtil.decrypt(frontEncryptData, RSAUtil.getPrivateKey()); + int index = dataMD5Mix.lastIndexOf(separatorStr); + String data = dataMD5Mix.substring(0, index); + String dataMD5 = dataMD5Mix.substring(index+separatorStr.length()); + dataArr[0] = data; + dataArr[1] = dataMD5; + return dataArr; + } + + /** + * 鍏圲RL瑙g爜,鍐嶈繘琛屽瘑鏂囪В鏋怺rsa(鏄庢枃+md5)] + */ + public static String[] decryptFrontP(String frontEncryptData,String separatorStr){ + try { + frontEncryptData = URLDecoder.decode(frontEncryptData, "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String[] dataArr = new String[2]; + String dataMD5Mix = RSAUtil.decrypt(frontEncryptData, RSAUtil.getPrivateKey()); + if(dataMD5Mix!=null){ + int index = dataMD5Mix.lastIndexOf(separatorStr); + String data = dataMD5Mix.substring(0, index); + String dataMD5 = dataMD5Mix.substring(index+separatorStr.length()); + dataArr[0] = data; + dataArr[1] = dataMD5; + } + return dataArr; + } + + public static void main(String[] args) { + try { + //String word = "123456"; + //String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpJ3j+SHQ69lqq+ShV7deA40Y+8rYra6rr4ReOJ+UE7ek8tsJJrcy1xMO1SophJdHXXwSNbZWhnJW9GlIq1Um6IplkwFc/AtyoeJDP3EJtUZgI5H6fSz0BPLFHn18C0Nxz1Br109U07DqQdMsarcBmKXYQw+2oZOz0KpA5b0FawIDAQAB"; + //String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kneP5IdDr2Wqr5KFXt14DjRj7ytitrquvhF44n5QTt6Ty2wkmtzLXEw7VKimEl0ddfBI1tlaGclb0aUirVSboimWTAVz8C3Kh4kM/cQm1RmAjkfp9LPQE8sUefXwLQ3HPUGvXT1TTsOpB0yxqtwGYpdhDD7ahk7PQqkDlvQVrAgMBAAECgYA8ASdX4W2n6a4kKnRSleLqqg8aHazqAPvTinmAJqU65VW02SJ42yxyV3gFnTSErXfIfxviO3/U+0ruWiFVEwV5oDEh0dOd+HHGm4YzFXIRglMeRBgLuVJ+owzoVDwZstiIBa69DIjaJtmpSf5FjwxAth+gtCv3e11IXHraKN720QJBAMPMB1WtmpRGYHxWVYjKSL+RGw+h3gMQLk3exZjhmYRlXuqfVZ2Zol+NazDc59K5f+geMdJ0/X2kKnKLVjWzYHMCQQC7z1cFYswtLemxGfj+dwlVC01VL4pKa7HGHl/FAQ2UNYZY2d5hE/nXYbTpfI0gMowX926/aFpia7NbAUJO7WEpAkAyUFa+LJthaOhYazMVsK2bFKW4kabkcJ8Fga6TR73UaNxIPGOa2SUBmuylpM6ptuNoeYHiDBAr3ijOQIIJ0KuDAkBy9fPahCNe9F+73J4hhVPdDtIDdto7u7hSAX215XMeabUW5iXNXqDsSg6nbWolb0t50CemWoYZALwE1Lx1+7AhAkEAoZtFt+2skjAxHEqNUye4vKBqB2Ng/wmfitCfT34lXWQsxs4BGk/8eQMzkam9bcB7FcinolxHF/1UjsUYpI+AgA=="; + + //List<String> keyPair = getKeyPair(); + //String encryptWord = encrypt(word, getPublicKey(keyPair.get(0))); + //System.out.println("鍔犲瘑鍚庣殑瀛楃涓�:"+encryptWord); + + //String encryptWord = "NTDEt29l3QqDjgbK5AToix14GQNMi2qPDgsIy7JQf0586wEhOr6LgQ3YuZo9gEYLgmRxdOtxTcVCMugIJnXr6xukoopYfdH7epnQlszMYcM73a7mOrI1DJQA8%2B7AnMkm0s3X3GR7CdpT2OHrdogOAywFWhBirETaeY36ZH%2FOrXQ%3D"; + //encryptWord=URLDecoder.decode(encryptWord, "utf-8"); + String encrypt = encrypt("hELEEWWEEr9Lu6HgEvttjj8vYhy3ID+PqPbumuXhcHhe", getPublicKey()); + System.out.println(encrypt); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/whyc/util/UserUtil.java b/src/main/java/com/whyc/util/UserUtil.java new file mode 100644 index 0000000..0cd574b --- /dev/null +++ b/src/main/java/com/whyc/util/UserUtil.java @@ -0,0 +1,25 @@ +package com.whyc.util; + + +import com.whyc.pojo.UserInf; +import org.apache.shiro.SecurityUtils; + +/** + * 浠嶴hiro涓洿鎺ヨ幏鍙栫敤鎴蜂俊鎭� + */ +public class UserUtil { + + public static UserInf getUser(){ + + UserInf principal = (UserInf) SecurityUtils.getSubject().getPrincipal(); + if(principal == null){ + UserInf user = new UserInf(); + user.setUname("unlogged user"); + user.setUid(0); + user.setUdownloadRole(0); + return user; + }else { + return principal; + } + } +} diff --git a/src/main/java/com/whyc/webSocket/LoginCheckSocket.java b/src/main/java/com/whyc/webSocket/LoginCheckSocket.java new file mode 100644 index 0000000..9a5d48e --- /dev/null +++ b/src/main/java/com/whyc/webSocket/LoginCheckSocket.java @@ -0,0 +1,92 @@ +package com.whyc.webSocket; + +import com.whyc.config.WebSocketConfig; +import com.whyc.dto.Response; +import com.whyc.service.UserInfService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpSession; +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 璐﹀彿閲嶅鐧诲綍妫�鏌� + */ +@Component +@ServerEndpoint(value = "/loginCheck",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class) +public class LoginCheckSocket { + + private Session session; + + private Thread thread; + private static UserInfService uinfService; + + @Autowired + public void setLoginService(UserInfService uinfService) { + LoginCheckSocket.uinfService = uinfService; + } + + @OnOpen + public void onOpen(Session session, EndpointConfig config){ + this.session = session; + HttpSession httpSession = (HttpSession) config.getUserProperties().get("httpSession"); + if(httpSession == null){ + Map<String, Response> res = new HashMap<>(); + Response resp1 = new Response().set(1, false, "鐧诲綍淇℃伅澶辨晥,閲嶆柊鐧诲綍"); + res.put("checkLogin", resp1); + try { + session.getBasicRemote().sendObject(new Response().set(1,res)); + } catch (IOException | EncodeException e) { + e.printStackTrace(); + } + }else { + Thread thread = new Thread() { + @Override + public void run() { + try { + Map<String, Response> res = new HashMap<>(); + Response sessionRes = new Response().set(1, httpSession.getId()); + while (!currentThread().isInterrupted()) { + Response response = uinfService.checkUserWebSocket(httpSession); + res.put("checkLogin", response); + res.put("session", sessionRes); + session.getBasicRemote().sendObject(new Response().set(1, res)); + if (response.getData() instanceof Boolean) { + if(response.getData().equals(false)) { + this.interrupt(); + } + } + sleep(4000); + } + } catch (Exception e) { + this.interrupt(); + } + } + }; + thread.start(); + this.thread = thread; + } + } + + @OnClose + public void onClose(CloseReason closeReason) throws IOException { + System.err.println("closeReason = " + closeReason); + if(session.isOpen()){ + session.close(); + } + } + + @OnError + public void onError(Throwable error) throws IOException { + error.printStackTrace(); + thread.isInterrupted(); + if(session.isOpen()){ + session.close(); + } + } + +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index 6ec5b1d..8c932f1 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -74,6 +74,11 @@ community: public retries: 1 timeout: 5000 +jasypt: + encryptor: + password: hELEEWWEEr9Lu6HgEvttjj8vYhy3ID+PqPbumuXhcHhe + algorithm: PBEWithMD5AndDES + iv-generator-classname: org.jasypt.iv.NoIvGenerator custom: #鐧诲綍楠岃瘉鐮� on/off fontDynamicCode: on @@ -82,10 +87,10 @@ #閲嶅惎瀵嗙爜 restartPasswd: ENC(AKxTGQo6bAABeC62B8Dtxw==) rsa: - publicKeyOld: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpJ3j+SHQ69lqq+ShV7deA40Y+8rYra6rr4ReOJ+UE7ek8tsJJrcy1xMO1SophJdHXXwSNbZWhnJW9GlIq1Um6IplkwFc/AtyoeJDP3EJtUZgI5H6fSz0BPLFHn18C0Nxz1Br109U07DqQdMsarcBmKXYQw+2oZOz0KpA5b0FawIDAQAB - privateKeyOld: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kneP5IdDr2Wqr5KFXt14DjRj7ytitrquvhF44n5QTt6Ty2wkmtzLXEw7VKimEl0ddfBI1tlaGclb0aUirVSboimWTAVz8C3Kh4kM/cQm1RmAjkfp9LPQE8sUefXwLQ3HPUGvXT1TTsOpB0yxqtwGYpdhDD7ahk7PQqkDlvQVrAgMBAAECgYA8ASdX4W2n6a4kKnRSleLqqg8aHazqAPvTinmAJqU65VW02SJ42yxyV3gFnTSErXfIfxviO3/U+0ruWiFVEwV5oDEh0dOd+HHGm4YzFXIRglMeRBgLuVJ+owzoVDwZstiIBa69DIjaJtmpSf5FjwxAth+gtCv3e11IXHraKN720QJBAMPMB1WtmpRGYHxWVYjKSL+RGw+h3gMQLk3exZjhmYRlXuqfVZ2Zol+NazDc59K5f+geMdJ0/X2kKnKLVjWzYHMCQQC7z1cFYswtLemxGfj+dwlVC01VL4pKa7HGHl/FAQ2UNYZY2d5hE/nXYbTpfI0gMowX926/aFpia7NbAUJO7WEpAkAyUFa+LJthaOhYazMVsK2bFKW4kabkcJ8Fga6TR73UaNxIPGOa2SUBmuylpM6ptuNoeYHiDBAr3ijOQIIJ0KuDAkBy9fPahCNe9F+73J4hhVPdDtIDdto7u7hSAX215XMeabUW5iXNXqDsSg6nbWolb0t50CemWoYZALwE1Lx1+7AhAkEAoZtFt+2skjAxHEqNUye4vKBqB2Ng/wmfitCfT34lXWQsxs4BGk/8eQMzkam9bcB7FcinolxHF/1UjsUYpI+AgA== - publicKey: MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAu7CdCMIoWXUX584JpmE1bTE1r1MtmZGswsSbsm4s9zqETQ4BmUT2kz/wvvGsI8T3ZvTT4KIyKP4Ez+yNVejMM5XwR95KF4e3UwMc724buWKl4pVL09kvkCZt8ZKf359VAvhyHHz80wIiVmJs6xbho7OBsv/s7Hwho0n4HPL4u/eNR5vWa2rtgQG1+fi1XP0UiSRKKW15Va9R2CI3zB+sffquhyX5fi+06NibWzk7OPU+EGvAwkaJtrmfLAvpwr4+G0MBLIsPVFV17Sgpoj62rtfbhHwmLSo1JTw+/JskDQOjxXfw+w3uHAZgPTlEmn2Ya9ssIljqCBfvM9nbGUWcnmppKlPm6kECa4RsgPiRgPFV+nT/Q98kfUTb798Sy63x4NIZkLQn1DDbmcAgUqLR6y1r0fD8Ne3vVtuZlVR/8ZlcRAfb+th2cNN0rytrnUreJo7kPtTFdkNtmj0KdUkRO8ea0YymEQal+b0tCl3V8osSy+qO2OVRd7yCvpOWEYOBAgMBAAE= - privateKey: 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 + #publicKeyOld: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpJ3j+SHQ69lqq+ShV7deA40Y+8rYra6rr4ReOJ+UE7ek8tsJJrcy1xMO1SophJdHXXwSNbZWhnJW9GlIq1Um6IplkwFc/AtyoeJDP3EJtUZgI5H6fSz0BPLFHn18C0Nxz1Br109U07DqQdMsarcBmKXYQw+2oZOz0KpA5b0FawIDAQAB + #privateKeyOld: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kneP5IdDr2Wqr5KFXt14DjRj7ytitrquvhF44n5QTt6Ty2wkmtzLXEw7VKimEl0ddfBI1tlaGclb0aUirVSboimWTAVz8C3Kh4kM/cQm1RmAjkfp9LPQE8sUefXwLQ3HPUGvXT1TTsOpB0yxqtwGYpdhDD7ahk7PQqkDlvQVrAgMBAAECgYA8ASdX4W2n6a4kKnRSleLqqg8aHazqAPvTinmAJqU65VW02SJ42yxyV3gFnTSErXfIfxviO3/U+0ruWiFVEwV5oDEh0dOd+HHGm4YzFXIRglMeRBgLuVJ+owzoVDwZstiIBa69DIjaJtmpSf5FjwxAth+gtCv3e11IXHraKN720QJBAMPMB1WtmpRGYHxWVYjKSL+RGw+h3gMQLk3exZjhmYRlXuqfVZ2Zol+NazDc59K5f+geMdJ0/X2kKnKLVjWzYHMCQQC7z1cFYswtLemxGfj+dwlVC01VL4pKa7HGHl/FAQ2UNYZY2d5hE/nXYbTpfI0gMowX926/aFpia7NbAUJO7WEpAkAyUFa+LJthaOhYazMVsK2bFKW4kabkcJ8Fga6TR73UaNxIPGOa2SUBmuylpM6ptuNoeYHiDBAr3ijOQIIJ0KuDAkBy9fPahCNe9F+73J4hhVPdDtIDdto7u7hSAX215XMeabUW5iXNXqDsSg6nbWolb0t50CemWoYZALwE1Lx1+7AhAkEAoZtFt+2skjAxHEqNUye4vKBqB2Ng/wmfitCfT34lXWQsxs4BGk/8eQMzkam9bcB7FcinolxHF/1UjsUYpI+AgA== + publicKey: ENC(QR8EpIC0jzG2E29Dhtq/vqrwt99WtUix/h2J8OvD90w0fosfUM1EFpdHJ2nsdP84BOeVNoPmudqXCYWVeCuTrVkqfb2z8mMLDl8cry78P8Tu4il3m9hGxqjdeNJbdYA6z6eRaInoJj5BHUyNpAJDaNacMZoOUJU6lMySwujyrD8PfSY97St0XPL5GIFP9rP1FCnlVWBeH4tqZKZ6MGncYJaITUZ/BIPkhpDYxi+i4CnMIBqytCJ6OJCzjLBI44UsQOzsdLgppAE2O0fmgyXA6bh0VRdIaRhqDIrjur2e4sOEvjadORN0Kg==) + privateKey: ENC(fDshYRxHSlpJ2v+CmDGzH/PlFIKr9+hcPg0patE+nOFMKQaEVNLj9XxOlGEDFabSLFvy1imSRmOF08EE/z9cmlsp+hfbF6feR6YABRHgDxOGWusZ9QKYLhv6vDD6pebKb2W3FCuIHnLicMiJfzpM5KGylTMv7rvtM7tFR8ZhDzn3s8uYotz6ORcfCPdgOcUcNHXT0WS2KA0NigsRH5YMF5IOCP2jNTaOFDDXYacjfGOwjFIGE71BMJCnMRp6RnukbAY1ZN3J88GpYRzYCYD/S9DbGFVY9giH0T7FZs5cgPsCoDZ1dIeJhmjbOxoQpwKoDZzvlYbsstMH+6wApaWgx9TJfBoNjEJdqM1S3asukV4bUq4cZnmryCeSWSYkR2FDuH792rXL3Msh2Jc2hB2Cg9ZPB5hljN5GWV0fYiKNjJW2ovgBZZRWURorkrfBReKsxuLcHlbBcdHBF9DZDJyy40fg9GP6w40uG3hBKd/OlA9IYWNWEgqgeMkNmesG9RTc4X7EG2Ar4MEDa1p6o3unIve/zTCpLoFzKCRIjYcqlW1pZfSwZD4wu6JJf+5tUoXaEEf5YD4dcWCD4DzUcv4qhOpHXDBtM3E45VdacMWZNdE7fXcDzWpgYdUSQ88HsXRjmaW0O/x5irdN5KGa89yj5bDYQeMzR7Cervxml3MUZSrkHVKsa9yWverlLaRXzTue3+MXgDudm1stHju5p2x55GWG9ZfcErDoTNqhgPwcbJnW7/vXFpoTt6AF3t8vbD7f5G+FXnvYLDUWtdNS8KN6X+EOkh4GWootC+QMEKArDr8AyL+5D2TkBGIDMAag/LVwAKSwvBs2+e/xsSlw+AuAsWcfb9whJCZNVogpA1jE56SIdIBtw4G4Lw9LMlJ2MprkV6e2VAtBwpou3fd5pUsKpu51WBfISRy60vls7Fu0mQXrT7cCzThptrk9KgIhjMtiI2jf6YpultF1+Hg5+IK863wKpiNmJbxmA+AOc171LVmNlqiSdDp2fptfIgaI5IMcLMJj8zvY2gghAGoRrchpSkteTLc48om87Duw1gR5lAZjUYzNON9wETte9bfUvQ6/ZkQE3rjEUY6TfyokKJf4X/0ZxKFz0YzkcHDXBaPefrIWxQGygeTsy0kZO7UKpYZo) aes: defaultKey: ENC(KdXXhvt6v7BDw7MgsR4J1OgahZgjl3kEil10+147oGA=) iv: ENC(Gtzf6s+BRoC1iQsRLMswSlBDSMom0kWtx5+SMJgaVDg=) diff --git a/src/main/resources/config/application-prod.yml b/src/main/resources/config/application-prod.yml index 51d5fc7..63f1b1c 100644 --- a/src/main/resources/config/application-prod.yml +++ b/src/main/resources/config/application-prod.yml @@ -62,4 +62,25 @@ community: public retries: 1 timeout: 5000 +jasypt: + encryptor: + password: hELEEWWEEr9Lu6HgEvttjj8vYhy3ID+PqPbumuXhcHhe + algorithm: PBEWithMD5AndDES + iv-generator-classname: org.jasypt.iv.NoIvGenerator +custom: + #鐧诲綍楠岃瘉鐮� on/off + fontDynamicCode: on + #鍏佽璺ㄥ煙鐨勭櫧鍚嶅崟 http://192.168.10.132:8080,http://192.168.10.109:8080 + cors: http://localhost:8080,http://192.168.10.114:8080,,http://192.168.10.86:8080 + #閲嶅惎瀵嗙爜 + restartPasswd: ENC(AKxTGQo6bAABeC62B8Dtxw==) + rsa: + #publicKeyOld: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpJ3j+SHQ69lqq+ShV7deA40Y+8rYra6rr4ReOJ+UE7ek8tsJJrcy1xMO1SophJdHXXwSNbZWhnJW9GlIq1Um6IplkwFc/AtyoeJDP3EJtUZgI5H6fSz0BPLFHn18C0Nxz1Br109U07DqQdMsarcBmKXYQw+2oZOz0KpA5b0FawIDAQAB + #privateKeyOld: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kneP5IdDr2Wqr5KFXt14DjRj7ytitrquvhF44n5QTt6Ty2wkmtzLXEw7VKimEl0ddfBI1tlaGclb0aUirVSboimWTAVz8C3Kh4kM/cQm1RmAjkfp9LPQE8sUefXwLQ3HPUGvXT1TTsOpB0yxqtwGYpdhDD7ahk7PQqkDlvQVrAgMBAAECgYA8ASdX4W2n6a4kKnRSleLqqg8aHazqAPvTinmAJqU65VW02SJ42yxyV3gFnTSErXfIfxviO3/U+0ruWiFVEwV5oDEh0dOd+HHGm4YzFXIRglMeRBgLuVJ+owzoVDwZstiIBa69DIjaJtmpSf5FjwxAth+gtCv3e11IXHraKN720QJBAMPMB1WtmpRGYHxWVYjKSL+RGw+h3gMQLk3exZjhmYRlXuqfVZ2Zol+NazDc59K5f+geMdJ0/X2kKnKLVjWzYHMCQQC7z1cFYswtLemxGfj+dwlVC01VL4pKa7HGHl/FAQ2UNYZY2d5hE/nXYbTpfI0gMowX926/aFpia7NbAUJO7WEpAkAyUFa+LJthaOhYazMVsK2bFKW4kabkcJ8Fga6TR73UaNxIPGOa2SUBmuylpM6ptuNoeYHiDBAr3ijOQIIJ0KuDAkBy9fPahCNe9F+73J4hhVPdDtIDdto7u7hSAX215XMeabUW5iXNXqDsSg6nbWolb0t50CemWoYZALwE1Lx1+7AhAkEAoZtFt+2skjAxHEqNUye4vKBqB2Ng/wmfitCfT34lXWQsxs4BGk/8eQMzkam9bcB7FcinolxHF/1UjsUYpI+AgA== + publicKey: ENC(QR8EpIC0jzG2E29Dhtq/vqrwt99WtUix/h2J8OvD90w0fosfUM1EFpdHJ2nsdP84BOeVNoPmudqXCYWVeCuTrVkqfb2z8mMLDl8cry78P8Tu4il3m9hGxqjdeNJbdYA6z6eRaInoJj5BHUyNpAJDaNacMZoOUJU6lMySwujyrD8PfSY97St0XPL5GIFP9rP1FCnlVWBeH4tqZKZ6MGncYJaITUZ/BIPkhpDYxi+i4CnMIBqytCJ6OJCzjLBI44UsQOzsdLgppAE2O0fmgyXA6bh0VRdIaRhqDIrjur2e4sOEvjadORN0Kg==) + privateKey: ENC(fDshYRxHSlpJ2v+CmDGzH/PlFIKr9+hcPg0patE+nOFMKQaEVNLj9XxOlGEDFabSLFvy1imSRmOF08EE/z9cmlsp+hfbF6feR6YABRHgDxOGWusZ9QKYLhv6vDD6pebKb2W3FCuIHnLicMiJfzpM5KGylTMv7rvtM7tFR8ZhDzn3s8uYotz6ORcfCPdgOcUcNHXT0WS2KA0NigsRH5YMF5IOCP2jNTaOFDDXYacjfGOwjFIGE71BMJCnMRp6RnukbAY1ZN3J88GpYRzYCYD/S9DbGFVY9giH0T7FZs5cgPsCoDZ1dIeJhmjbOxoQpwKoDZzvlYbsstMH+6wApaWgx9TJfBoNjEJdqM1S3asukV4bUq4cZnmryCeSWSYkR2FDuH792rXL3Msh2Jc2hB2Cg9ZPB5hljN5GWV0fYiKNjJW2ovgBZZRWURorkrfBReKsxuLcHlbBcdHBF9DZDJyy40fg9GP6w40uG3hBKd/OlA9IYWNWEgqgeMkNmesG9RTc4X7EG2Ar4MEDa1p6o3unIve/zTCpLoFzKCRIjYcqlW1pZfSwZD4wu6JJf+5tUoXaEEf5YD4dcWCD4DzUcv4qhOpHXDBtM3E45VdacMWZNdE7fXcDzWpgYdUSQ88HsXRjmaW0O/x5irdN5KGa89yj5bDYQeMzR7Cervxml3MUZSrkHVKsa9yWverlLaRXzTue3+MXgDudm1stHju5p2x55GWG9ZfcErDoTNqhgPwcbJnW7/vXFpoTt6AF3t8vbD7f5G+FXnvYLDUWtdNS8KN6X+EOkh4GWootC+QMEKArDr8AyL+5D2TkBGIDMAag/LVwAKSwvBs2+e/xsSlw+AuAsWcfb9whJCZNVogpA1jE56SIdIBtw4G4Lw9LMlJ2MprkV6e2VAtBwpou3fd5pUsKpu51WBfISRy60vls7Fu0mQXrT7cCzThptrk9KgIhjMtiI2jf6YpultF1+Hg5+IK863wKpiNmJbxmA+AOc171LVmNlqiSdDp2fptfIgaI5IMcLMJj8zvY2gghAGoRrchpSkteTLc48om87Duw1gR5lAZjUYzNON9wETte9bfUvQ6/ZkQE3rjEUY6TfyokKJf4X/0ZxKFz0YzkcHDXBaPefrIWxQGygeTsy0kZO7UKpYZo) + aes: + defaultKey: ENC(KdXXhvt6v7BDw7MgsR4J1OgahZgjl3kEil10+147oGA=) + iv: ENC(Gtzf6s+BRoC1iQsRLMswSlBDSMom0kWtx5+SMJgaVDg=) + i18n: zh-CN diff --git a/src/main/resources/mapper/UserInfMapper.xml b/src/main/resources/mapper/UserInfMapper.xml new file mode 100644 index 0000000..53d112d --- /dev/null +++ b/src/main/resources/mapper/UserInfMapper.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.whyc.mapper.UserInfMapper"> + <update id="createNumber"> + CREATE TABLE if not exists db_user.temp_numbers (unumber INT); + </update> + <update id="setUnumber"> + ${sql} + </update> + <select id="existTable" resultType="java.lang.String"> + select + DISTINCT table_name + from information_schema.tables + where table_name = 'temp_numbers' + and TABLE_SCHEMA = 'db_user' + </select> + + <select id="selectSnId" resultType="java.lang.String"> + select usnid from db_user.user_inf where uname=#{uname} limit 1 + </select> + <select id="judgeUname" resultType="java.lang.Integer"> + select count(*) from db_user.user_inf where uid>100 + </select> + <select id="getAllUser" resultType="UserInf"> + select uid,uname,udownload_role from db_user.user_inf where uid>100 + </select> + <select id="getIn1000" resultType="java.lang.String"> + SELECT min(unumber) + FROM db_user.temp_numbers t + WHERE t.unumber NOT IN (SELECT uid FROM db_user.user_inf); + </select> + <select id="getMaxUid" resultType="java.lang.String"> + SELECT max(uid) + FROM db_user.user_inf where uid>1000 + </select> + +</mapper> \ No newline at end of file -- Gitblit v1.9.1