.idea/libraries/Maven__commons_net_commons_net_3_8_0.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: commons-net:commons-net:3.8.0"> <CLASSES> <root url="jar://$MAVEN_REPOSITORY$/commons-net/commons-net/3.8.0/commons-net-3.8.0.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$MAVEN_REPOSITORY$/commons-net/commons-net/3.8.0/commons-net-3.8.0-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$MAVEN_REPOSITORY$/commons-net/commons-net/3.8.0/commons-net-3.8.0-sources.jar!/" /> </SOURCES> </library> </component> server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -12,6 +12,8 @@ import com.doumee.dao.business.model.Device; import com.doumee.service.business.DeviceService; import com.doumee.service.business.HkSyncService; import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl; import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -32,22 +34,24 @@ public class HkSyncController extends BaseController { @Autowired private HkSyncService hkSyncService; private HkSyncDeviceServiceImpl hkSyncDeviceService; @Autowired private HkSyncParkServiceImpl hkSyncParkService; @PreventRepeat @ApiOperation("ãæµ·åº·ãå ¨é忥é¨ç¦è®¾å¤æ¥å£") @PostMapping("/getDevices") @RequiresPermissions("business:hksync:device") // @RequiresPermissions("business:hksync:device") public ApiResponse getDevices(@RequestBody AcsDeviceListRequest param) { String result = hkSyncService.syncHkDevices(param); String result = hkSyncDeviceService.syncHkDevices(param); return ApiResponse.success(result); } @PreventRepeat @ApiOperation("ãæµ·åº·ãå ¨é忥åè½¦åºæ¥å£") @PostMapping("/getDevices") @RequiresPermissions("business:hksync:park") public ApiResponse getDevices(@RequestBody ParkListRequest param) { String result = hkSyncService.syncHkParks(param); @PostMapping("/getParks") // @RequiresPermissions("business:hksync:park") public ApiResponse getParks(@RequestBody ParkListRequest param) { String result = hkSyncParkService.syncHkParks(param); return ApiResponse.success(result); } server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java
@@ -12,7 +12,7 @@ /** * Shiro认è¯è¿æ»¤å¨ï¼å¤çæªè®¤è¯æ åµçååº * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ public class ShiroAuthFilter extends FormAuthenticationFilter { server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroCache.java
@@ -1,24 +1,28 @@ package com.doumee.config.shiro; import com.doumee.service.proxy.CacheProxy; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.util.CollectionUtils; import org.springframework.context.annotation.Scope; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.SerializationException; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.io.Serializable; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.concurrent.TimeUnit; /** * Shiroç¼å * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ @Scope(value = "prototype") @Slf4j @@ -27,8 +31,8 @@ private String keyPrefix = ""; @Autowired private CacheProxy<Object, Serializable> cacheProxy; @Resource(name="sessionRedisTemplate") private RedisTemplate<Object, Serializable> redisTemplate; public ShiroCache () { log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]"); @@ -44,7 +48,7 @@ if (key == null) { return null; } return cacheProxy.get(getKey(key)); return redisTemplate.opsForValue().get(getKey(key)); } @Override @@ -52,7 +56,7 @@ if (key == null) { return null; } cacheProxy.put(getKey(key), value); redisTemplate.opsForValue().set(getKey(key), value); return value; } @@ -60,14 +64,14 @@ if (key == null) { return null; } cacheProxy.put(getKey(key), value, timeout); redisTemplate.opsForValue().set(getKey(key), value, timeout, TimeUnit.SECONDS); return value; } @Override public void clear() throws CacheException { Set<Object> keys = this.keys(); cacheProxy.remove(keys); redisTemplate.delete(keys); } @Override @@ -77,7 +81,7 @@ @Override public Set<Object> keys() { Set<Object> keys = cacheProxy.keys(keyPrefix + "*"); Set<Object> keys = redisTemplate.keys(keyPrefix + "*"); if (CollectionUtils.isEmpty(keys)) { return Collections.emptySet(); } @@ -92,7 +96,7 @@ return values; } for (Object k : keys) { values.add(cacheProxy.get(k)); values.add(redisTemplate.opsForValue().get(k)); } return values; } @@ -103,11 +107,53 @@ return null; } Serializable value = this.get(getKey(key)); cacheProxy.remove(getKey(key)); redisTemplate.delete(getKey(key)); return value; } private Object getKey (Object key) { if (key instanceof PrincipalCollection) { return this.keyPrefix + getRedisKeyFromPrincipalIdField((PrincipalCollection)key); } return (key instanceof String ? (this.keyPrefix + key) : key); } /** * è·åredis cache key */ private String getRedisKeyFromPrincipalIdField(PrincipalCollection key) { Object principalObject = key.getPrimaryPrincipal(); if (principalObject instanceof String) { return principalObject.toString(); } else { Method pincipalIdGetter = this.getPrincipalIdGetter(principalObject); return this.getIdObj(principalObject, pincipalIdGetter); } } private Method getPrincipalIdGetter(Object principalObject) { Method pincipalIdGetter; String principalIdMethodName = this.getPrincipalIdMethodName(); try { pincipalIdGetter = principalObject.getClass().getMethod(principalIdMethodName); return pincipalIdGetter; } catch (NoSuchMethodException e) { throw new SerializationException(e.getMessage(), e); } } private String getIdObj(Object principalObject, Method pincipalIdGetter) { try { Object idObj = pincipalIdGetter.invoke(principalObject); String redisKey = idObj.toString(); return redisKey; } catch (Exception e) { throw new SerializationException(e.getMessage(), e); } } private String getPrincipalIdMethodName() { return "getId"; } } server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java
@@ -14,7 +14,7 @@ /** * èªå®ä¹Shiro CacheManager * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ @Slf4j @Component server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -10,8 +10,12 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import javax.servlet.Filter; import java.io.Serializable; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -39,6 +43,20 @@ @Autowired private ShiroRealm shiroRealm; @Bean("sessionRedisTemplate") public RedisTemplate<Object, Serializable> sessionRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Serializable> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // é»è®¤åºååæ¹å¼ redisTemplate.setDefaultSerializer(new StringRedisSerializer()); // å¼åºååæ¹å¼ ShiroSessionSerializer serializer = new ShiroSessionSerializer(); redisTemplate.setValueSerializer(serializer); redisTemplate.setHashValueSerializer(serializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); @@ -50,6 +68,9 @@ public SessionManager sessionManager() { ShiroSessionManager sessionManager = new ShiroSessionManager(); sessionManager.setSessionDAO(shiroSessionDAO); sessionManager.setGlobalSessionTimeout(sessionExpireTime*1000); // å é¤å¤±æçsession sessionManager.setDeleteInvalidSessions(true); return sessionManager; } @@ -66,20 +87,32 @@ public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, String> map = new HashMap<>(); Map<String, String> map = new LinkedHashMap<>(); // è·¯å¾æ¦æªé ç½® map.put("/system/login", "anon"); map.put("/system/syncLingCountData", "anon"); map.put("/system/wxLogin", "anon"); map.put("/system/wxProgramLogin", "anon"); map.put("/system/wxAccountLogin", "anon"); map.put("/system/initCompany", "anon"); map.put("/system/logout", "anon"); map.put("/common/captcha", "anon"); //æä»¶ä¸ä¼ åæ¶æ¦æª map.put("/public/**", "anon"); map.put("/statistics/**", "anon"); map.put("/dingding/push", "anon"); // map.put("/ext/workorderExt/freshStatistics", "anon"); map.put("/dingding/jsapiTicket", "anon"); map.put("/dingding/ddLogin", "anon"); map.put("/dingding/getDingdingCorpId", "anon"); map.put("/lingyang/login", "anon"); map.put("/lingyang/loginDemo", "anon"); map.put("/lingyang/importBatch", "anon"); map.put("/edgp/**", "anon"); // - æ¾è¡swagger map.put("/doc.html", "anon"); map.put("/webjars/**", "anon"); map.put("/template/**", "anon"); map.put("/swagger-resources/**", "anon"); map.put("/v2/api-docs/**", "anon"); map.put("/wgListener/**", "anon"); // - å ¶ä»æ¥å£ç»ä¸æ¦æª map.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(map); server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java
@@ -14,11 +14,10 @@ /** * Shiroå¯ç æ¯å¯¹å¤ç * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ @Component public class ShiroCredentialsMatcher extends HashedCredentialsMatcher { @Lazy @Autowired private SystemUserService systemUserService; server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java
@@ -18,7 +18,7 @@ /** * èªå®ä¹Shiro SessionDAOï¼å°ä¼è¯ä¿¡æ¯åå ¥ç¼åä¸ * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ @Data @Slf4j @@ -30,7 +30,7 @@ @Autowired private ShiroCache shiroCache; private int expireTime = 1800; private int expireTime = 60 * 60 * 24; @Autowired private ShiroTokenManager shiroTokenManager; server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java
@@ -19,7 +19,7 @@ /** * èªå®ä¹ä¼è¯ç®¡çå¨ * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ @Slf4j public class ShiroSessionManager extends DefaultSessionManager implements WebSessionManager { @@ -65,7 +65,6 @@ } return sessionId; } @Override public boolean isServletContainerSessions() { return false; server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.doumee.config.shiro; import org.apache.commons.lang3.SerializationUtils; import org.apache.shiro.codec.Base64; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; import java.io.Serializable; import java.nio.charset.StandardCharsets; /** * Sessionåºåå * @author Eva.Caesar Liu * @date 2023/04/17 12:11 */ public class ShiroSessionSerializer implements RedisSerializer<Serializable> { @Override public byte[] serialize(Serializable obj) throws SerializationException { if (obj == null) { return new byte[0]; } String sessionBase64 = Base64.encodeToString(SerializationUtils.serialize(obj)); return sessionBase64.getBytes(StandardCharsets.UTF_8); } @Override public Serializable deserialize(byte[] bytes) throws SerializationException { if (bytes == null || bytes.length == 0) { return null; } String sessionString = new String(bytes, StandardCharsets.UTF_8); byte[] sessionBytes = Base64.decode(sessionString); return SerializationUtils.deserialize(sessionBytes); } } server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroToken.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ package com.doumee.config.shiro; import com.doumee.core.model.LoginUserInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.springframework.stereotype.Component; /** * èªå®ä¹Token ï¼å¤ç认è¯åæé * @author Eva.Caesar Liu * @date 2022/04/18 18:12 */ @Component public class ShiroToken extends UsernamePasswordToken { /** * å ¬å¸ID */ Integer companyId; Boolean isDdLogin; Boolean isWxLogin; LoginUserInfo updateUser; int updateFlag; public ShiroToken() { } public ShiroToken(Integer companyId, String username, String password, boolean isDdLogin, boolean isWxLogin) { super(username, password, false, (String)null); this.companyId = companyId; this.isDdLogin = isDdLogin; this.isWxLogin = isWxLogin; } public ShiroToken(LoginUserInfo user,int updateFlag) { super(user.getUsername(), "", false, (String)null); this.updateUser = user; this.updateFlag = updateFlag; this.isDdLogin = true; } public Boolean getDdLogin() { return isDdLogin; } public void setDdLogin(Boolean ddLogin) { isDdLogin = ddLogin; } public Boolean getWxLogin() { return isWxLogin; } public void setWxLogin(Boolean wxLogin) { isWxLogin = wxLogin; } public Integer getCompanyId() { return companyId; } public void setCompanyId(Integer companyId) { this.companyId = companyId; } public LoginUserInfo getUpdateUser() { return updateUser; } public void setUpdateUser(LoginUserInfo updateUser) { this.updateUser = updateUser; } public int getUpdateFlag() { return updateFlag; } public void setUpdateFlag(int updateFlag) { this.updateFlag = updateFlag; } } server/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java
@@ -8,7 +8,7 @@ /** * é»è®¤Token管çå¨ * @author Eva.Caesar Liu * @date 2023/03/21 14:49 * @date 2023/04/17 12:11 */ @Component public class ShiroTokenManager { server/pom.xml
@@ -276,6 +276,10 @@ <artifactId>commons-net</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> <build> <plugins>