前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义注解

自定义注解

原创
作者头像
在下是首席架构师
发布2022-08-18 20:40:06
2760
发布2022-08-18 20:40:06
举报
文章被收录于专栏:从入门到出门从入门到出门

创建@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() {}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建@Aptx4869注解类
  • 创建@Aptx4869注解类的切面拦截器
    • 实现逻辑
      • 使用方法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档