1.添加文章信息
@PostMapping
public Result add(@RequestBody @Validated Article article){
articleService.add(article);
return Result.success();
}
void add(Article article);
@Override
public void add(Article article) {
article.setCreateTime(LocalDateTime.now());
article.setUpdateTime(LocalDateTime.now());
Map map = ThreadLocalUtil.get();
Integer id =(Integer) map.get("id");
article.setUserId(id);
articleMapper.add(article);
}
@Insert("insert into article(title,content,cover_img,state,cate_id," +
"create_time,update_time,user_id)" +
" values (#{title},#{content},#{coverImg},#{state},#{cateId}," +
"#{createTime},#{updateTime},#{userId})")
void add(Article article);
2.查询文章信息
@GetMapping
public Result> list(
Integer pageNum,
Integer pageSize,
@RequestParam(required = false) Integer cateId,
@RequestParam(required = false) String state
){
PageBean pb=articleService.list(pageNum,pageSize,cateId,state);
return Result.success(pb);
}
PageBean list(Integer pageNum, Integer pageSize, Integer cateId, String state);
@Override
public PageBean list(Integer pageNum, Integer pageSize, Integer cateId, String state) {
PageBean pageBean = new PageBean<>();
PageHelper.startPage(pageNum,pageSize);
Map map = ThreadLocalUtil.get();
Integer id = (Integer) map.get("id");
List as=articleMapper.list(id,cateId,state);
Page p=(Page) as;
pageBean.setTotal(p.getTotal());
pageBean.setItems(p.getResult());
return pageBean;
}
List list(Integer userId, Integer cateId, String state);
@Data
public class Article {
private Integer id;
@NotEmpty
@Pattern(regexp = "^\\S{1,10}$")
private String title;
@NotEmpty
private String content;
@NotEmpty
@URL
private String coverImg;
@State
private String state;
private Integer userId;
@NotNull
private Integer cateId;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
private Long total;
private List items;
}
@Documented
@Constraint(
validatedBy = {StateValidation.class}
)
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface State {
String message() default "state参数的值只能是已经发布或者草稿";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
public class StateValidation implements ConstraintValidator {
@Override
public boolean isValid(String var1, ConstraintValidatorContext var2){
if(var1==null)return false;
if(var1.equals("已发布")||var1.equals("草稿"))return true;
return false;
}
}
3.配置分页
com.github.pagehelper
pagehelper-spring-boot-starter
1.4.6
4.redis使用存储token
org.springframework.boot
spring-boot-starter-data-redis
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/big_event
username: root
password: root
data:
redis:
host: localhost
port: 6379
@PatchMapping("/updatePwd")
public Result updatePwd(@RequestBody Map params,@RequestHeader("Authorization")String token){
String oldPwd = params.get("old_pwd");
String newPwd = params.get("new_pwd");
String rePwd = params.get("re_pwd");
if(!StringUtils.hasLength(oldPwd) ||
!StringUtils.hasLength(newPwd)||
!StringUtils.hasLength(rePwd)){
return Result.error("缺少必要参数");
}
Map map = ThreadLocalUtil.get();
String username = (String) map.get("username");
User user = userService.findByUserName(username);
if(!user.getPassword().equals(Md5Utils.encrypt3ToMd5(oldPwd))){
return Result.error("原密码填写不正确");
}
if(!rePwd.equals(newPwd)){
return Result.error("两次填写的密码不一致");
}
userService.updatePwd(newPwd);
ValueOperations operations = stringRedisTemplate.opsForValue();
operations.getOperations().delete(token);
return Result.success();
}
@PostMapping("/login")
public Result login(@Pattern(regexp = "^\\S{4,16}$") String username,
@Pattern(regexp = "^\\S{5,16}$") String password){
User loginUser = userService.findByUserName(username);
if(loginUser==null){
return Result.error("用户名错误");
}
if(Md5Utils.encrypt3ToMd5(password).equals(loginUser.getPassword())){
Map map = new HashMap<>();
map.put("id",loginUser.getId());
map.put("username",loginUser.getUsername());
String s = JwtUtil.genToken(map);
ValueOperations operations = stringRedisTemplate.opsForValue();
operations.set(s,s,1, TimeUnit.HOURS);
return Result.success(s);
}
return Result.error("密码错误");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("Authorization");
try {
ValueOperations operations = stringRedisTemplate.opsForValue();
String s = operations.get(token);
if(s==null){
throw new RuntimeException();
}
Map map = JwtUtil.parseToken(token);
ThreadLocalUtil.set(map);
return true;
}catch (Exception e){
response.setStatus(401);
return false;
}
}