创建@Aptx4869注解类
代码语言:javascript复制import java.lang.annotation.*;
/**
* @author xuyuntong
* @date 2020/9/29 10:13
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Aptx4869 {
}
创建@Aptx4869注解类的切面拦截器
代码语言:javascript复制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的方法上添加就行
代码语言:javascript复制/**
* 修改资源
* @return 返回处理结果
*/
@RequestMapping(value = "/edit")
@ResponseBody
@Aptx4869
public Object edit() {}