Spring案例:百度网盘密码数据兼容处理

本文通过一个具体的例子展示了如何利用Spring AOP(面向切面编程)来处理输入参数中的多余空格问题,特别是在百度网盘链接密码验证场景下。通过在业务方法执行前对所有参数进行trim()操作,实现了对尾部空格的兼容,简化了代码并提高了代码复用性。示例包括了业务层、数据层、AOP切面以及配置类的代码实现,最终验证了无论密码是否带有尾部空格,都能正确处理。这表明AOP是处理此类共性功能的理想选择。
摘要由CSDN通过智能技术生成

需求:对百度网盘分享链接输入密码时尾部多输入的空格做兼容处理

d10bf5740372484d94ac962aec14a024.png

分析:

1、在业务方法执行之前对所有的输入参数进行格式出——trim()

2、使用处理后的参数调用原始方法——环绕通知中存在对原始方法的调用

代码实现:

ResourcesService业务层接口:

public interface ResourcesService {
    public boolean openURL(String url ,String password);
}

ResourcesServiceImpl业务层实现类:

import com.itheima.dao.ResourcesDao;
import com.itheima.service.ResourcesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ResourcesServiceImpl implements ResourcesService {
    @Autowired
    private ResourcesDao resourcesDao;

    public boolean openURL(String url, String password) {
        return resourcesDao.readResources(url,password);
    }
}

ResourcesDao数据层接口:

public interface ResourcesDao {
    boolean readResources(String url, String password);
}

ResourcesDaoImpl数据层实现类:模拟校验

import com.itheima.dao.ResourcesDao;
import org.springframework.stereotype.Repository;

@Repository
public class ResourcesDaoImpl implements ResourcesDao {
    public boolean readResources(String url, String password) {
        //模拟校验
        return password.equals("root");
    }
}

SpringConfig配置类:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@ComponentScan("com.itheima")
@EnableAspectJAutoProxy
public class SpringConfig {
}

DataAdvice的aop类:

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.springframework.stereotype.Component;

@Component
@Aspect
public class DataAdvice {
    @Pointcut("execution(boolean com.itheima.service.*Service.*(*,*))")
    private void servicePt(){}

    @Around("DataAdvice.servicePt()")
    public Object trimStr(ProceedingJoinPoint pjp) throws Throwable {
        Object[] args = pjp.getArgs();
        for (int i = 0; i < args.length; i++) {
            //判断参数是不是字符串
            if(args[i].getClass().equals(String.class)){
                //取出数据,trim()操作后,更新数据
                args[i] = args[i].toString().trim();
            }
        }
        Object ret = pjp.proceed(args);
        return ret;
    }
}

App运行类:

import com.itheima.config.SpringConfig;
import com.itheima.service.ResourcesService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        ResourcesService resourcesService = ctx.getBean(ResourcesService.class);
        boolean flag = resourcesService.openURL("http://pan.baidu.com/haha", "root ");
    }
}

执行结果:

a58ed011b36e4a68977d5ca8a4475eaf.png

可以看出,不管加不加空格,对百度网盘分享链接输入密码时尾部多输入的空格做兼容处理的需求已经解决。如果有些相同的大量使用的功能,需要在很多地方加的话,使用AOP是你的不二选择。使用AOP能简化你的共性功能的开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏志121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值