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<String,Object> 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<PageBean<Article>> list(
Integer pageNum,
Integer pageSize,
@RequestParam(required = false) Integer cateId,
@RequestParam(required = false) String state
){
PageBean<Article> pb=articleService.list(pageNum,pageSize,cateId,state);
return Result.success(pb);
}
PageBean<Article> list(Integer pageNum, Integer pageSize, Integer cateId, String state);
@Override
public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer cateId, String state) {
PageBean<Article> pageBean = new PageBean<>();
PageHelper.startPage(pageNum,pageSize);
Map<String,Object> map = ThreadLocalUtil.get();
Integer id = (Integer) map.get("id");
List<Article> as=articleMapper.list(id,cateId,state);
Page<Article> p=(Page<Article>) as;
pageBean.setTotal(p.getTotal());
pageBean.setItems(p.getResult());
return pageBean;
}
List<Article> 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 <T>{
private Long total;
private List<T> 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<State,String> {
@Override
public boolean isValid(String var1, ConstraintValidatorContext var2){
if(var1==null)return false;
if(var1.equals("已发布")||var1.equals("草稿"))return true;
return false;
}
}
3.配置分页
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
4.redis使用存储token
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
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<String,String> 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<String,Object> 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<String, String> operations = stringRedisTemplate.opsForValue();
operations.getOperations().delete(token);
return Result.success();
}
@PostMapping("/login")
public Result<String> 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<String, Object> map = new HashMap<>();
map.put("id",loginUser.getId());
map.put("username",loginUser.getUsername());
String s = JwtUtil.genToken(map);
ValueOperations<String, String> 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<String, String> operations = stringRedisTemplate.opsForValue();
String s = operations.get(token);
if(s==null){
throw new RuntimeException();
}
Map<String, Object> map = JwtUtil.parseToken(token);
ThreadLocalUtil.set(map);
return true;
}catch (Exception e){
response.setStatus(401);
return false;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。