使用注解 实现 切面编程

本文介绍了如何使用注解来实现切面编程,包括定义注解、定义切面以及在控制器中添加注解的步骤。示例中展示了在控制器方法上使用MsgSecCheck注解进行内容合规性检验,注解可以指定内容字段和参数下标。
摘要由CSDN通过智能技术生成

使用注解 实现 切面编程

1.定义注解

@Target({ElementType.METHOD})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface MsgSecCheck {

    String value();

    int idx() default 0;


}

2.定义切面

@Aspect
@Component
public class MsgSecCheckAspect {

    @Autowired
    WeixinMiniService weixinMiniService;


    /**
     * 切入点
     */
    @Pointcut("@annotation(com.sandun.app.config.msgsec.MsgSecCheck)")
    public void methodArgs() {

    }


    /**
     * 操作
     *
     * @param joinPoint
     */
    @Before("methodArgs()")
    public void before(JoinPoint joinPoint) {

        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        MsgSecCheck msgSecCheck = method.getAnnotation(MsgSecCheck.class);

        try {
            Object arg = joinPoint.getArgs()[msgSecCheck.idx()];
            String s;
            if(arg instanceof String){
                s=(String) arg;
            }else {
                Map<String, Object> map = BeanUtil.beanToMap(arg);
                s = map.get(msgSecCheck.value()).toString();
            }
            LogFactory.get().info("检测内容是否合规:"+s);
            boolean b = weixinMiniService.getSecCheckService().checkMessage(s);
            if(!b) {
                throw new ApiException("内容不合规,请检查");
            }
        } catch (WxErrorException ignored) {
            throw new ApiException("内容不合规,请检查");
        }

    }


}

3.在控制器中添加注解

    @MsgSecCheck("comment")
    public ApiResp<String> insetAssistanceLeave(@Valid @RequestBody InsetAssistanceLeaveDTO insetAssistanceLeaveDTO){
        sdModeAssistanceLeaveService.insetAssistanceLeave(insetAssistanceLeaveDTO);
        return ApiResp.respOK("");
    }

其他代码片段
(1).留言实体累InsetAssistanceLeaveDTO

public class InsetAssistanceLeaveDTO {

    @NotNull(message = "请选择目标编号")
    @ApiModelProperty(value = "目标编号")
    private Integer assistanceId;
    @NotEmpty(message = "留言内容必填")
    @ApiModelProperty(value = "留言内容")
    private String comment;
    @ApiModelProperty(value = "回复留言编号")
    private Integer fId;


    public Integer getAssistanceId() {
        return assistanceId;
    }

    public void setAssistanceId(Integer assistanceId) {
        this.assistanceId = assistanceId;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public Integer getfId() {
        return fId;
    }

    public void setfId(Integer fId) {
        this.fId = fId;
    }
}

其他代码说明
这是一段检验微信发布内容是否合规的代码
控制其中加入注解MsgSecCheck 自动完成检验

注解参数
value:内容字段,不填时取idx的值
idx:参数下标,默认取第一个参数字段

其他注解说明
@Valid:校验数据完整性
@RequestBody:json提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值