springboot测试项目怎么模拟请求超时_spring

 

首先创建一个springboot项目,导入相关依赖,主要是导入整合redis的包

spring-boot-starter-data-redis

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.14</version>
        </dependency>

yml配置文件加入整合redis配置,我连接的是本地的redis,如果是部署在虚拟机上,就将本地地址修改为虚拟机的ip地址,密码没有设置就不配置,有就设置,选择的是0号数据库,redis会有多个数据库,默认是16个,从0开始,就是0到15号

redis:
    host: 127.0.0.1
    port: 6379
    database: 0
#    password: 123456

其他数据源配置不变,然后要实现登录,那就需要一个登录页面,还有登录后跳转的页面

登录页面就放一个表单即可,页面自己画一个表单即可,然后跳转到controller层方法,

然后通过用户名去访问数据库,访问后拿到一个用户对象,进行条件判断,密码经过了md5加密

然后要操作缓存,那就需要一个操作缓存的对象,在springdataredis中他提供了一个高度封装的

对像,redisTemplates,redis中有5种数据类型,通过这个对象去拿到对应数据类型的操作对象

这里我拿的是String类型的操作对象,opsForValue去操作String类型的缓存

在登录的时候需要将用户信息存入缓存中,设置一个key,我存入的是用户id,key也是用户id

不同的用户就是不同的id,在存入缓存之前需要进行判断,需要根据当前查询出对象的id去缓存中

获取,判断是否为null,如果为空,当前用户没有登录,然后将信息存入缓存

如果不为空,则提示信息,用户已登录,

dao层和service和service实现层用mybatisplus继承一下就行了,在对应的层上面加入注解

dao层加入 @Mapper  service实现层: @service

@Autowired
private RedisTemplate redisTemplate;
@PostMapping("/login")
    public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
        String password = employee.getPassword();
        password= DigestUtils.md5DigestAsHex(password.getBytes());
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp = employeeService.getOne(queryWrapper);
        if(emp==null){
            return R.error("登录失败");
        }
        if(!emp.getPassword().equals(password)){
            return R.error("登录失败");
        }
        if(emp.getStatus()==0){
            return R.error("账号已禁用");
        }
        Object user = redisTemplate.opsForValue().get(String.valueOf(emp.getId()));
        if(user!=null){
            return R.error("用户已经登录");
        }
        request.getSession().setAttribute("employee",emp.getId());
        redisTemplate.opsForValue().set(String.valueOf(emp.getId()),emp.getId());
        return R.success(emp);
    }

这样的话就是如果当前用户登录了,再去使用该用户去登录,就登录不进去,如果没有登录,就登录进去,将信息存入缓存中,也就是保证只能登录一个该用户,数据库随便创建一个user表,

给个id,用户名和密码,大概就是这样,就将信息存入缓存,每次登录都需要去缓存中获取信息进行判断,判断用户是否登录,就不能再次登录该用户,页面给出提示信息,没有登录过,就将信息存入缓存,返回正确信息