创建@Aptx4869注解类

import java.lang.annotation.*;

/**
 * @author xuyuntong
 * @date 2020/9/29 10:13
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Aptx4869 {
}

创建@Aptx4869注解类的切面拦截器

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
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.util.UUID;

/**
 * @author xuyuntong
 * @date 2020/9/29 10:16
 */
@Aspect
@Component
public class Aptx4869Aspect {

    @Around(value = "@annotation(aptx4869)")
    public Object check(ProceedingJoinPoint joinPoint, Aptx4869 aptx4869) throws Throwable {
        Object obj = null;
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();

        //当是post方法时,校验参数,否则走下方的设置参数,这意味着在调用这个post方法之前,需要调用另外一个有次注解的接口方法,来设置参数
        if("POST".equalsIgnoreCase(request.getMethod())){
            Object sessionFlag = ShiroKit.getSessionAttr("柯南汉字怎么写");

            //这里request是前台页面的参数,要在form表单里提交带过来的
            String 柯南汉字怎么写 = request.getParameter("柯南汉字怎么写");
            if(sessionFlag == null || !sessionFlag.equals(柯南汉字怎么写)){
                throw new Exception("不知道柯南汉字怎么写,不予通过");
            }
            obj = joinPoint.proceed();
        } else {
            obj = joinPoint.proceed();
        }

        return obj;
    }

    /**
     * 当不是post方法时,就只设置参数,只有当是post方法时,才去校验
     * @param joinPoint
     */
    @AfterReturning(value = "@annotation(nnotion.Aptx4869)")
    public void settingParameters(JoinPoint joinPoint){
        System.out.println("当前处理类为:"+ joinPoint.getTarget().getClass().getName());
        String uuid = UUID.randomUUID().toString().replace("-", "");
        ShiroKit.setSessionAttr("柯南汉字怎么写","柯南"+uuid);
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();

        //这里是为了在form表单中存入到hidden的input中去,这样就会在提交表单的时候,将这个参数再带过来了,但前提是前台要将这个值存储在form表单中
        request.setAttribute("柯南汉字怎么写","柯南"+uuid);

    }


}

实现逻辑

代码逻辑:
访问get接口,接口通过并返回一个参数key-value设置到request中去,
同时也会往session中设置一个相同的key-value,
前台拿到这个key-value,然后存储到form表单中,post提交表单时,会将这个key-value提交,
后台校验此key-value和session中的key-value是否一致

使用方法

在Controller的方法上添加就行

/**
     * 修改资源
     * @return 返回处理结果
     */
    @RequestMapping(value = "/edit")
    @ResponseBody 
    @Aptx4869
    public Object edit() {
取消