From 5e7b0ed4a154ad067cbcf4aa1a1c7cce32f9864c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 26 四月 2024 18:02:17 +0800 Subject: [PATCH] 唯品会链接解析升级 --- fanli/src/main/java/com/yeshi/fanli/aspect/integral/IntegralGetFrequencyLimitAspect.java | 191 ++++++++++++++++++++++++----------------------- 1 files changed, 96 insertions(+), 95 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/aspect/integral/IntegralGetFrequencyLimitAspect.java b/fanli/src/main/java/com/yeshi/fanli/aspect/integral/IntegralGetFrequencyLimitAspect.java index 4eb0206..d079f4b 100644 --- a/fanli/src/main/java/com/yeshi/fanli/aspect/integral/IntegralGetFrequencyLimitAspect.java +++ b/fanli/src/main/java/com/yeshi/fanli/aspect/integral/IntegralGetFrequencyLimitAspect.java @@ -1,95 +1,96 @@ -package com.yeshi.fanli.aspect.integral; - -import java.lang.reflect.Method; - -import javax.annotation.Resource; - -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.Signature; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.core.DefaultParameterNameDiscoverer; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.Expression; -import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.springframework.stereotype.Component; - -import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.annotation.integral.IntegralGetFrequencyLimit; - -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; - -@Component -@Aspect -public class IntegralGetFrequencyLimitAspect { - - @Resource - private JedisPool jedisPool; - - private ExpressionParser parser = new SpelExpressionParser(); - - private DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); - - public String generateKeyBySpEL(String spELString, ProceedingJoinPoint joinPoint) { - MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); - String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); - Expression expression = parser.parseExpression(spELString); - EvaluationContext context = new StandardEvaluationContext(); - Object[] args = joinPoint.getArgs(); - for (int i = 0; i < args.length; i++) { - context.setVariable(paramNames[i], args[i]); - } - return expression.getValue(context).toString(); - } - - @Around("execution(public * com.yeshi.fanli.service.impl.user.integral.*.*(..))") - public Object requestSerializable(ProceedingJoinPoint joinPoint) throws Throwable { - Signature signature = joinPoint.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method targetMethod = methodSignature.getMethod(); - try { - Method realMethod = joinPoint.getTarget().getClass().getDeclaredMethod(joinPoint.getSignature().getName(), - targetMethod.getParameterTypes()); - if (realMethod.isAnnotationPresent(IntegralGetFrequencyLimit.class)) { - IntegralGetFrequencyLimit rs = realMethod.getAnnotation(IntegralGetFrequencyLimit.class); - String key = rs.key(); - int timeS = rs.time(); - - String catchKey = "integral-get-frequency-" + StringUtil.Md5(generateKeyBySpEL(key, joinPoint)); - - Jedis jedis = jedisPool.getResource(); - try { - if (jedis.setnx(catchKey, "1") > 0) { - jedis.expire(catchKey, timeS); - try { - return joinPoint.proceed(); - } catch (Exception e) {// 寮傚父浜嗘湰娆¤姹備笉绠� - jedis.del(catchKey); - } - } else { - return null; - } - } catch (Exception e) { - try { - return joinPoint.proceed(); - } finally { - } - } finally { - jedisPool.returnResource(jedis); - } - } - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (SecurityException e) { - e.printStackTrace(); - } - - return joinPoint.proceed(); - - } - -} +package com.yeshi.fanli.aspect.integral; + +import java.lang.reflect.Method; + +import javax.annotation.Resource; + +import com.yeshi.fanli.util.RedisManager; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.stereotype.Component; + +import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.annotation.integral.IntegralGetFrequencyLimit; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +@Component +@Aspect +public class IntegralGetFrequencyLimitAspect { + + @Resource + private RedisManager redisManager; + + private ExpressionParser parser = new SpelExpressionParser(); + + private DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + public String generateKeyBySpEL(String spELString, ProceedingJoinPoint joinPoint) { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + Expression expression = parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } + + @Around("execution(public * com.yeshi.fanli.service.impl.user.integral.*.*(..))") + public Object requestSerializable(ProceedingJoinPoint joinPoint) throws Throwable { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method targetMethod = methodSignature.getMethod(); + try { + Method realMethod = joinPoint.getTarget().getClass().getDeclaredMethod(joinPoint.getSignature().getName(), + targetMethod.getParameterTypes()); + if (realMethod.isAnnotationPresent(IntegralGetFrequencyLimit.class)) { + IntegralGetFrequencyLimit rs = realMethod.getAnnotation(IntegralGetFrequencyLimit.class); + String key = rs.key(); + int timeS = rs.time(); + + String catchKey = "integral-get-frequency-" + StringUtil.Md5(generateKeyBySpEL(key, joinPoint)); + + Jedis jedis =redisManager.getJedis(); + try { + if (jedis.setnx(catchKey, "1") > 0) { + jedis.expire(catchKey, timeS); + try { + return joinPoint.proceed(); + } catch (Exception e) {// 寮傚父浜嗘湰娆¤姹備笉绠� + jedis.del(catchKey); + } + } else { + return null; + } + } catch (Exception e) { + try { + return joinPoint.proceed(); + } finally { + } + } finally { + jedis.close(); + } + } + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (SecurityException e) { + e.printStackTrace(); + } + + return joinPoint.proceed(); + + } + +} -- Gitblit v1.8.0