如何设置网站服务器访问权限怎样做网站软件
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:50
当前位置: 首页 > news >正文
如何设置网站服务器访问权限,怎样做网站软件,单页关键词优化费用,淮阳住房和城乡建设局网站两种方法#xff0c; 一种是后端实现#xff0c;较复杂#xff0c;要通过自定义注解和AOP以及Redis组合实现 另一种是前端实现#xff0c;简单#xff0c;只需通过js#xff0c;设置过期时间#xff0c;一定时间内#xff0c;多次点击按钮只生效一次 后端实现
自定义注… 两种方法 一种是后端实现较复杂要通过自定义注解和AOP以及Redis组合实现 另一种是前端实现简单只需通过js设置过期时间一定时间内多次点击按钮只生效一次 后端实现
自定义注解AOPRedis
自定义注解
package com.wzw.config.anno;import java.lang.annotation.;/** 自定义注解防止表单重复提交/
Target(ElementType.METHOD) // 注解只能用于方法
Retention(RetentionPolicy.RUNTIME) // 修饰注解的生命周期
Documented
public interface RepeatSubmit {/** 防重复操作过期时间,默认1s/long expireTime() default 1;
}
AOP
package com.wzw.config.aspect;import com.wzw.config.anno.RepeatSubmit;
import com.wzw.config.exception.CustomException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit;/** 防止重复提交切面/
Slf4j
Component
Aspect
public class RepeatSubmitAspect {Autowiredprivate RedisTemplate redisTemplate;/** 定义切点/Pointcut(annotation(com.wzw.config.anno.RepeatSubmit))public void repeatSubmit() {}Around(repeatSubmit())public Object around(ProceedingJoinPoint joinPoint) throws Throwable {ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();Method method ((MethodSignature) joinPoint.getSignature()).getMethod();// 获取防重复提交注解RepeatSubmit annotation method.getAnnotation(RepeatSubmit.class);// 获取token当做keyString token request.getHeader(token);if (StringUtils.isBlank(token)) {throw new RuntimeException(token不存在请登录);}String url request.getRequestURI();/** 通过前缀 url token 来生成redis上的 key* 可以在加上用户id小编这里没办法获取大家可以在项目中加上/String redisKey repeat_submit_key:.concat(url).concat(token);log.info(redisKey {},redisKey);if (!redisTemplate.hasKey(redisKey)) {redisTemplate.opsForValue().set(redisKey, redisKey, annotation.expireTime(), TimeUnit.SECONDS);try {//正常执行方法并返回return joinPoint.proceed();} catch (Throwable throwable) {redisTemplate.delete(redisKey);throw new Throwable(throwable);}} else {// 抛出异常throw new CustomException(请勿重复提交);}}
}
自定义异常类和全局异常处理
自定义异常类CustomException
package com.wzw.config.exception;/** 自定义异常/
public class CustomException extends Exception {public CustomException() {super();}public CustomException(String message) {super(message);}
}
全局异常处理CustomExceptionHandler
package com.wzw.config.exception;import com.wzw.base.pojo.Result;
import com.wzw.config.exception.CustomException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;Slf4j
RestControllerAdvice
public class CustomExceptionHandler {/** 每当抛出CustomException异常就会进入这里* param e 自定义异常类* return 返回值实体/ExceptionHandler(value CustomException.class)ResponseBodypublic Result handleCustomException(CustomException e){Result resultResult.init();result.setMsg(e.getMessage());result.setCode(0);return result;}}
响应实体Result
package com.wzw.base.pojo;import lombok.Data;/** 返回值响应实体/
Data
public class Result {private int code;private String msg;private Object data;public static Result init(){return new Result();}public static Result ok(){Result resultResult.init();result.code1;return result;}public static Result ok(String msg){Result resultResult.ok();result.setMsg(msg);return result;}public static Result err(){Result resultResult.init();result.code0;return result;}public static Result err(String msg){Result resultResult.err();result.setMsg(msg);return result;}
}
Redis
设置Redis配置数据源然后创建 Redis配置类
package com.wzw.config.config;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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;Configuration
public class RedisConfig {Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory connectionFactory){RedisTemplateObject, Object template new RedisTemplate();template.setConnectionFactory(connectionFactory);Jackson2JsonRedisSerializer serializer new Jackson2JsonRedisSerializer(Object.class);// 使用StringRedisSerializer来序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(serializer);// Hash的key也采用StringRedisSerializer的序列化方式template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(serializer);template.afterPropertiesSet();return template;}
}
使用 /** 防止重复提交测试* return 响应实体* throws CustomException 自定义异常类/RequestMapping(/testCustomerException)ResponseBodyRepeatSubmit(expireTime 10) //不加expireTime默认1s内加参数可以重新设定防止重复提交的时间public Result testCustomerException() throws CustomException {Result resultResult.ok(请求成功);return result;}可以看到第一次是请求成功之后五秒都是提示请勿重复提交
前端实现
来源https://blog.csdn.net/liangmengbk/article/details/127075604
/ 防止重复点击 */
let clickTimer 0function clickThrottle() {var interval 3000;//3秒钟之内重复点击只算一次点击let now new Date(); // 获取当前时间的时间戳let timer clickTimer; // 记录触发事件的事件戳if (now - timer interval) {// 如果当前时间 - 触发事件时的事件 interVal那么不符合条件直接return false// 不让当前事件继续执行下去return false;} else {// 反之记录符合条件触发了事件的时间戳并 return true使事件继续往下执行clickTimer now;return true;}
}在需要的地方进行调用 if(!clickThrottle()) return;
- 上一篇: 如何设置网站标题博物馆网站建设的目标
- 下一篇: 如何设置网站根目录兰州响应式网站建设
相关文章
-
如何设置网站标题博物馆网站建设的目标
如何设置网站标题博物馆网站建设的目标
- 技术栈
- 2026年03月21日
-
如何设置公司网站网站定制需求
如何设置公司网站网站定制需求
- 技术栈
- 2026年03月21日
-
如何设置的iis后台服务网站地址扬州网站建设电话
如何设置的iis后台服务网站地址扬州网站建设电话
- 技术栈
- 2026年03月21日
-
如何设置网站根目录兰州响应式网站建设
如何设置网站根目录兰州响应式网站建设
- 技术栈
- 2026年03月21日
-
如何设置网站描述淮南餐饮网站建设
如何设置网站描述淮南餐饮网站建设
- 技术栈
- 2026年03月21日
-
如何设置一个网站个人备案公司网站
如何设置一个网站个人备案公司网站
- 技术栈
- 2026年03月21日






