第一章
1.Spring Boot環境搭建
添加依賴
2.集成Thymeleaf , Result結果封裝
添加依賴、配置信息
3.集成Mybatis + Druid
添加依賴、配置信息
4.集成Redis+通用緩存Key封裝
添加依賴+redis配置信息+JedisPool /RedisTemplate +RedisService(包含序列化)
第二章
1.數據庫設計
並且編寫對應的pojo類和mapper接口
2.明文密碼兩次MD5處理
MD5(MD5(密碼,固定salt),數據庫中的salt)
抽象成一個util類
3. JSR303參數檢驗+全局異常處理器
在LoginVo添加註解來取代LoginController中對傳入參數LoginVo的參數校驗。如下所示
@NotNull
@IsMobile
private String mobile;
@NotNull
@Length(min = 32)
private String password;
自定義註解@IsMobile
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class})
public @interface IsMobile {
boolean required() default true;
String message() default "手機號碼格式有誤";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import com.lcy.miaosha.util.ValidatorUtil;
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {
private boolean required=false;
@Override
public void initialize(IsMobile constraintAnnotation) {
required=constraintAnnotation.required();
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (required){
return ValidatorUtil.isMobile(s);
}else {
if (StringUtils.isEmpty(s))
return true;
else
return ValidatorUtil.isMobile(s);
}
}
}
參數異常將產生BindException異常
定義一個全局異常處理器
import java.util.List;
/**
* 全局異常處理器
*/
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result<String> exceptionHandler(HttpServletRequest request,Exception e){
e.printStackTrace();
if (e instanceof GlobalException){
GlobalException ex=(GlobalException)e;
return Result.error(ex.getCm());
}else if (e instanceof BindException){
BindException ex=(BindException)e;
List<ObjectError> errors = ex.getAllErrors();
ObjectError error=errors.get(0);
String msg =error.getDefaultMessage();
return Result.error(CodeMsg.BIND_ERROR.fillArgs(msg));
}else {
return Result.error(CodeMsg.SERVER_ERROR);
}
}
}
4.分佈式Session
1.在登錄完成後生成token寫進cookie並存到Session中,並且存到redis中<token,user>的形式
2.當在其他頁面時,token隨之傳遞,編寫getByToken來得到我們存到Redis的user並且從新定義一個cookie,來更新cookie時效
3.重寫WebMvcConfigurerAdapter中的addArgumentResolvers是的controller可以識別user信息