目录
本地文件上传
接口文档
业务实现
登录优化
SpringBoot集成redis
实现令牌主动失效机制
多环境开发
本地文件上传
接口文档
业务实现
创建FileUploadController类并编写请求方法
@RestController
public class FileUploadController {@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws IOException {//把文件内容存储到本地磁盘中String Filename = file.getOriginalFilename(); //自动获取文件名//保证文件名唯一 防止被覆盖String filename = UUID.randomUUID() + Filename.substring(Filename.lastIndexOf("."));//文件传输file.transferTo( new File("D:\\ck\\"+filename));//返回return Result.success("url访问地址……");}
}
运行请求查看
查看目录 文件已传输成功
登录优化
令牌主动失效机制
- 登录成功后,给浏览器响应令牌的同时,把该令牌存储到redis中
- LoginInterceptor拦截器中,需要验证浏览器携带的令牌,并同时需要获取到redis中存储的与之相同的令牌
- 当用户修改密码成功后,删除redis中存储的旧令牌
SpringBoot集成redis
导入spring-boot-starter-data-redis起步依赖
<!-- redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
在yml配置文件中, 配置redis连接信息
data:redis:host: localhostport: 6379
调用API(StringRedisTemplate)完成字符串的存取操作
@SpringBootTest //如果在测试类上添加了这个注解,那么将来单元测试方法执行之前,会先初始化Spring容器
public class redis_test {@Autowiredprivate StringRedisTemplate stringRedisTemplate; //注入StringRedisTemplate对象@Testpublic void testSet(){//向redis中存储一个键值对ValueOperations<String, String> Operations = stringRedisTemplate.opsForValue();Operations.set("name","TiTi"); //存入String o = Operations.get("name"); //获取System.out.println(o);}
}
实现令牌主动失效机制
修改login登录接口方法
@Autowiredprivate StringRedisTemplate stringRedisTemplate; //注入StringRedisTemplate对象@PostMapping("login")public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password){//根据用户名查询用户User loginUser = userService.findByUserName(username); //定义实例对象//判断用户是否存在if(loginUser == null){return Result.error("用户名错误");}//判断密码是否正确,将传入的password参数转成密文,再和数据库中的密文进行判断是否相同if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){//登录成功Map<String,Object> claims = new HashMap<>(); //定义map集合对象claims.put("id",loginUser.getId()); //添加idclaims.put("username",loginUser.getUsername()); //添加用户名//生成jwtString token = JwtUtil.genToken(claims);//把token存储到redis中ValueOperations<String, String> Operations = stringRedisTemplate.opsForValue();Operations.set(token,token,1, TimeUnit.HOURS); //(键,值,过期时间1小时)return Result.success(token);}return Result.error("密码错误");}
在拦截器中修改从redis中获取token
在更新密码方法中设置更新密码就删除掉redis中的token
多环境开发
SpringBoot提供的Profiles可以用来隔离应用程序配置的各个部分,并在特定环境下指定部分配置生效
三个横线用于分隔不同的配置环境
---
on-profile用于指定哪些配置属于哪个环境
spring:config:activate:on-profile: 环境名称
active用于指定哪个环境生效
spring:profiles:active: 环境名称
通过多个文件分别配置不同环境的属性 文件的名字为 application-环境名称.yml 在application.yml中激活环境
application.yml文件指定激活文件
spring:profiles:active: devgroup:"dev": devServer,devDB,devSelf
- 按照配置的类别,把配置信息配置到不同的配置文件中:application-分类名.yml
- 在application.yml中定义分组 :spring.profiles.group
- 在application.yml中激活分组 :spring.profiles.active