1. 参数校验
三步走
- 引入Spring Validation依赖
validation依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.在参数前面加@Pattern注解
public Result register(@Pattern(regexp = "^\\S{5,16}") String username,
@Pattern(regexp = "^\\S{5,16}") String password)
等同于下面的代码
if (username!=null && username.length()>=5 &&
username.length()<=16 && password!=null &password.length()<=16)
3.在Controller类中添加@Valiated注解
2.参数校验后返回的错误信息如何统一
提供一个全局异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handlerException(Exception e){
e.printStackTrace();
//判断返回的消息是否带有信息
//借助Spring提供的StringUtils工具类
return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage():"操作失败");
}
}
3.登录逻辑的实现
//登录的实现
@PostMapping("/login")
public Result<String> login(@Pattern(regexp ="^\\S{5,16}$") String username,
@Pattern(regexp ="^\\S{5,16}$")String password){
//根据用户名查询user
User loginUser= userService.findByUserName(username);
//判断是否查到
if (loginUser==null){
return Result.error("用户名不存在");
}
//判断密码是否正确
//对传进来的参数进行加密,然后进行比对
if (Md5Util.getMD5String(password).equals(loginUser.getPassword())){
return Result.success("登录成功");
}
return Result.error("密码错误");
}
4.JWT令牌
- jwt ,JSON Web Token
- 定义了一种简洁的,自包含的格式,用于通信双方以json数据格式安全的传输信息
由三部分组成
- 第一部分,header,记录令牌类型,签名算法等
- 第二部分,Payload,有效再喝,携带一些自定义信息,默认信息等,例如{“id”,“1”,“username”,“tom”},不可以在这部分放一些敏感数据,因为这里使用的Base64编码,任何专业人员都可以进行解码或者编码。
- 第三部分,Signature(签名),防止token被篡改,确保安全性,将header,payload,加入指定的秘钥通过指定的签名算法计算而来