From 169d7d0cecd3e50aca33d42cc38230dd8aeb5770 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 23 七月 2025 16:32:26 +0800 Subject: [PATCH] 实现AuthInterceptor中的空白方法 --- /dev/null | 144 ---------------------------- se-common/src/main/java/com/terra/common/service/CommonService.java | 50 +++++++++ se-common/src/main/java/com/terra/common/mapper/CommonMapper.java | 11 + se-common/src/main/java/com/terra/common/interceptor/AuthInterceptor.java | 82 +++++++-------- 4 files changed, 96 insertions(+), 191 deletions(-) diff --git a/se-common/src/main/java/com/terra/common/interceptor/AuthInterceptor.java b/se-common/src/main/java/com/terra/common/interceptor/AuthInterceptor.java index f9c1700..5ba477f 100644 --- a/se-common/src/main/java/com/terra/common/interceptor/AuthInterceptor.java +++ b/se-common/src/main/java/com/terra/common/interceptor/AuthInterceptor.java @@ -4,6 +4,7 @@ import com.terra.common.entity.all.HttpStatus; import com.terra.common.entity.all.ResponseMsg; import com.terra.common.entity.all.StaticData; +import com.terra.common.entity.lf.TokenPo; import com.terra.common.entity.lf.UserPo; import com.terra.common.helper.StringHelper; import com.terra.common.helper.WebHelper; @@ -14,7 +15,6 @@ import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -25,7 +25,7 @@ */ @Configuration public class AuthInterceptor implements HandlerInterceptor { - private CommonService commonService; + private final CommonService commonService; private static final Log log = LogFactory.getLog(AuthInterceptor.class); @@ -66,7 +66,7 @@ } // 3.鑾峰彇鐢ㄦ埛浠ょ墝 - UserPo ue = commonService.getUserByToken(token); //new UserPo(); //sysService.tokenService.getUserByToken(token); + UserPo ue = commonService.getUserByToken(token); if (null == ue) { return WebHelper.writeStr2Page(response, NO_LOGIN); } @@ -83,21 +83,21 @@ } // 6.admin璺宠繃鏉冮檺妫�娴� - if (StaticData.ADMIN.equals(ue.getUid())) { - return true; + //if (StaticData.ADMIN.equals(ue.getUid())) { + // return true; + //} + + // 7.妫�鏌ョ敤鎴稩D鏄惁绂佺敤 + if (commonService.isUidDisable(ue)) { + return WebHelper.writeStr2Page(response, USER_LOCK); } - // 7.妫�鏌ョ櫧鍚嶅崟鍜孖P涓�鑷存�� + // 8.妫�鏌ョ櫧鍚嶅崟鍜孖P涓�鑷存�� if (!checkWhiteList(ip, request)) { if (!checkIpSource(ip, token)) { return WebHelper.writeStr2Page(response, ILLEGAL_TOKEN); } } - - // 8.妫�鏌ョ敤鎴稩D鏄惁绂佺敤 - //if (sysService.tokenService.isUidDisable(ue)) { - // return WebHelper.writeStr2Page(response, USER_LOCK); - //} // 9.鏉冮檺鏍¢獙 if (!checkPerms(ue, request)) { @@ -127,31 +127,22 @@ } /** - * 妫�鏌ユ潈闄� + * 妫�鏌ョ櫧鍚嶅崟 */ - private boolean checkPerms(UserPo ue, HttpServletRequest request) { - return true; + private boolean checkWhiteList(String ip, HttpServletRequest request) { + List<String> whiteList = commonService.selectIpList(2); + if (whiteList == null || whiteList.isEmpty()) { + return false; + } -// List<String> list = null; //sysService.permsService.selectPerms(ue.getUid()); -// if (list == null || list.size() == 0) { -// return false; -// } -// -// String url = request.getRequestURI(); -// for (String perm : list) { -// if (url.contains(perm)) { -// return true; -// } -// } -// -// return false; + return whiteList.contains(ip); } /** * 妫�鏌ラ粦鍚嶅崟 */ private boolean checkBlackList(String ip, HttpServletRequest request) { - List<String> blackList = null; // sysService.blacklistService.selectIpList(1); + List<String> blackList = commonService.selectIpList(1); if (blackList == null || blackList.isEmpty()) { return true; } @@ -163,25 +154,30 @@ } /** - * 妫�鏌ョ櫧鍚嶅崟 - */ - private boolean checkWhiteList(String ip, HttpServletRequest request) { - List<String> whiteList = null; // sysService.blacklistService.selectIpList(2); - if (whiteList == null || whiteList.isEmpty()) { - return false; - } - - return whiteList.contains(ip); - } - - /** * 妫�鏌P涓�鑷存�э細鍥哄畾浠ょ墝涓嶆鏌� */ private boolean checkIpSource(String ip, String token) { - //TokenEntity te = sysService.tokenService.getEntityByToken(token); + TokenPo te = commonService.getTokenPo(token); - //return StaticData.I1 == te.getType() || te.getIp().equals(ip); + return StaticData.I1 == te.getType() || te.getIp().equals(ip); + } - return true; + /** + * 妫�鏌ユ潈闄� + */ + private boolean checkPerms(UserPo ue, HttpServletRequest request) { + List<String> list = commonService.selectPerms(ue.getUid()); + if (list == null || list.size() == 0) { + return false; + } + + String url = request.getRequestURI(); + for (String perm : list) { + if (url.contains(perm)) { + return true; + } + } + + return false; } } diff --git a/se-common/src/main/java/com/terra/common/mapper/CommonMapper.java b/se-common/src/main/java/com/terra/common/mapper/CommonMapper.java index 2319b7e..537e33d 100644 --- a/se-common/src/main/java/com/terra/common/mapper/CommonMapper.java +++ b/se-common/src/main/java/com/terra/common/mapper/CommonMapper.java @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Map; @Mapper @@ -18,8 +19,14 @@ int insertOperate(Map<String, Object> map); @Select("select * from lf.sys_user where id = (select create_user from lf.sys_token where token=#{token} and expire > now() limit 1)") - public UserPo selectByToken(String token); + UserPo selectByToken(String token); @Select("select a.* from lf.sys_token a where token = #{token} and expire > now() limit 1") - public TokenPo selectOneByToken(String token); + TokenPo selectOneByToken(String token); + + @Select("") + List<String> selectIpList(Integer type); + + @Select("") + List<String> selectPerms(String type); } diff --git a/se-common/src/main/java/com/terra/common/service/CommonService.java b/se-common/src/main/java/com/terra/common/service/CommonService.java index a62e402..480d31e 100644 --- a/se-common/src/main/java/com/terra/common/service/CommonService.java +++ b/se-common/src/main/java/com/terra/common/service/CommonService.java @@ -2,6 +2,7 @@ import com.terra.common.entity.all.RedisCacheKey; import com.terra.common.entity.all.SettingData; +import com.terra.common.entity.all.StaticData; import com.terra.common.entity.lf.TokenPo; import com.terra.common.entity.lf.UserPo; import com.terra.common.helper.StringHelper; @@ -11,6 +12,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.concurrent.TimeUnit; /** @@ -20,10 +24,11 @@ @Component public class CommonService { @Resource - RedisService redisService; + CommonMapper mapper; + @Resource - CommonMapper mapper; + RedisService redisService; public UserPo getCurrentUser(HttpServletRequest req) { String token = WebHelper.getToken(req); @@ -76,4 +81,45 @@ return po; } + + /** + * 鐢ㄦ埛ID鏄�/鍚︾鐢� + */ + public boolean isUidDisable(UserPo ue) { + String key = RedisCacheKey.signPwdError(ue.getUid()); + Object objCount = redisService.get(key); + + return null != objCount && (int) objCount >= SettingData.PWD_ERR_COUNT; + } + + public List<String> selectIpList(Integer type) { + String key = RedisCacheKey.blacklistKey(type.toString()); + + Object obj = redisService.get(key); + if (obj instanceof List<?>) { + return (List<String>) obj; + } + + List<String> list = mapper.selectIpList(type); + if (list != null && !list.isEmpty()) { + redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); + } + + return list; + } + + public List<String> selectPerms(String uid) { + String key = RedisCacheKey.permsPermsKey(uid); + Object obj = redisService.get(key); + if (obj instanceof List<?>) { + return (List<String>) obj; + } + + List<String> list = mapper.selectPerms(uid); + if (list != null && !list.isEmpty()) { + redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); + } + + return list; + } } diff --git a/se-system/src/main/java/com/terra/system/config/WebConfig.java b/se-system/src/main/java/com/terra/system/config/WebConfig.java deleted file mode 100644 index 73de1c6..0000000 --- a/se-system/src/main/java/com/terra/system/config/WebConfig.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.terra.system.config; - -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.alibaba.fastjson.support.config.FastJsonConfig; -import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; -import com.alibaba.fastjson2.JSON; -import com.terra.common.interceptor.AuthInterceptor; -import com.terra.common.service.CommonService; -import com.terra.system.service.all.SysService; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.http.MediaType; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.util.AntPathMatcher; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.servlet.config.annotation.*; -import reactor.core.Exceptions; - -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.util.Collections; -import java.util.List; - -/** - * Web閰嶇疆绫� - * @author WWW - */ -//@Configuration -public class WebConfig extends WebMvcConfigurationSupport { - @Resource - CommonService commonService; - - @Override - public void addViewControllers(ViewControllerRegistry registry) { - // 璁剧疆璁块棶璺緞涓� 鈥�/鈥� 璺宠浆鍒版寚瀹氶〉闈� - registry.addViewController("/").setViewName("redirect:/sign/toIndex"); - // 璁剧疆涓烘渶楂樹紭鍏堢骇 - registry.setOrder(Ordered.HIGHEST_PRECEDENCE); - } - - /** - * 鑾峰彇鎷︽埅鍣ㄥ璞� - * - * @return - */ - public AuthInterceptor getAuthBean() { - return new AuthInterceptor(commonService); - } - - /** - * swagger鎺у埗 - */ - @Override - protected void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); - //registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); - registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); - registry.addResourceHandler("/druid/**").addResourceLocations("classpath:/META-INF/resources/druid/"); - registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); - super.addResourceHandlers(registry); - } - - /** - * 蹇界暐url鍦板潃澶у皬鍐� - */ - @Override - protected void configurePathMatch(PathMatchConfigurer configurer) { - AntPathMatcher matcher = new AntPathMatcher(); - matcher.setCaseSensitive(false); - - configurer.setPathMatcher(matcher); - } - - /** - * 璺ㄥ煙璇锋眰 - */ - /*@Override - protected void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowCredentials(true) - .allowedOrigins("*") - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("*") - .maxAge(3600); - }*/ - - /** - * 娣诲姞缁熶竴鐨勬嫤鎴櫒 - */ - @Override - protected void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(getAuthBean()) - // .excludePathPatterns("/swagger", "/webjars/**", "/v2/**", "/sign/**") - //.excludePathPatterns("/v3/api-docs") - .addPathPatterns("/**"); - super.addInterceptors(registry); - } - - /** - * 澶勭悊json鏍煎紡锛屽�糿ull鐨勮浆鎹负"" - */ - @Override - public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { - //FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); - FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter() { - @Override - protected void writeInternal(Object object, org.springframework.http.HttpOutputMessage outputMessage) - throws IOException, org.springframework.http.converter.HttpMessageNotWritableException { - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if (attributes != null) { - String requestURI = attributes.getRequest().getRequestURI(); - if ("/v3/api-docs".equals(requestURI)) { // 鎺掗櫎 /v3/api-docs 璺緞 - // 浣跨敤榛樿鐨� JSON 搴忓垪鍖栵紙濡� Jackson锛夛紝杩欓噷闇�瑕佹墜鍔ㄥ鐞嗭紝涓嶈兘鐩存帴璋冪敤 super.writeInternal - outputMessage.getBody().write(String.valueOf(object).getBytes()); - return; - } - } - super.writeInternal(object, outputMessage); // 鍏朵粬璺緞浣跨敤 Fastjson2 澶勭悊 - } - }; - - FastJsonConfig config = new FastJsonConfig(); - config.setSerializerFeatures( - SerializerFeature.WriteNullListAsEmpty, - SerializerFeature.WriteMapNullValue, - //SerializerFeature.WriteNullStringAsEmpty, - SerializerFeature.WriteNullNumberAsZero, - SerializerFeature.WriteNullBooleanAsFalse); - // 缁撴灉鏄惁鏍煎紡鍖�,榛樿涓篺alse - //SerializerFeature.PrettyFormat); - - converter.setFastJsonConfig(config); - converter.setDefaultCharset(StandardCharsets.UTF_8); - converter.setSupportedMediaTypes(Collections.singletonList( - MediaType.APPLICATION_JSON - )); - converters.add(converter); - } -} -- Gitblit v1.9.3