码神之路总结

为什么会有跨域问题?

域名,端口不一样都是跨域,前后端域名相同

跨域问题解决:

自定义配置类实现 WebMvcConfigurer 接口,重写 addCorsMappings() 方法

@Configuration
public class WebMVCConfig implements WebMvcConfigurer {

@Override
    public void addCorsMappings(CorsRegistry registry) {
    //    跨域设置
        registry.addMapping("/**")
                .allowCredentials(true)
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
             }
}
 

分页显示文章信息

首先创建一个Page类封装前端的分页参数,利用mybatis-plus提供的page对象来进行分页查询,同时添加排序条件,此时查询出来的数据还不是我们前端需要的,还得根据查询的文章id查询文章的标签相关信息,然后再把所有信息通过BeanUtils.copyProperties()方法复制到ArticleVo中,返回给前端。

最新文章

构造一个条件构造器,根据文章创建时间来排序,查询文章的名称,展示前面最个最新文章

//最新文章
    @Override
    public Result newArticle(int limit) {
        LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByDesc(Article::getCreateDate)
                .select(Article::getId,Article::getTitle)
                .last("limit "+limit);
        List<Article> articles = articleMapper.selectList(wrapper);
        return Result.success(copyList(articles,false,false));
    }

统一异常处理

创建一个统一异常处理类,加上@ControllerAdvice,就会对加了@Controller的方法进行拦截处理,AOP实现。
@ControllerAdvice
public class AllExceptionHandler {
    //处理Exception.class异常
    @ExceptionHandler(Exception.class)
    //返回json数据
    @ResponseBody
    public Result doExceptionHandler(Exception e) {
        return Result.fail(-999,"系统异常,抱歉!");
    }
}


登录功能实现

1)首先检查参数是否合法

2)再对密码进行MD5加密处理 DigestUtils.md5Hex(password);,

3)在对账号进行验证。如果账号密码正确使用jwt生成token,并返回给前端。

登陆后用户的token会存放在浏览器本地,当用户登陆时会在请求头携带token,token中含有用户的id,用户的信息实际存放在redis中。token放在请求头中,所以要获取token通过@RequestHeader(“Authorization”)注解获取

退出登录

退出登录就是删除redis中的toke

注册功能

1)判断参数是否合法;
2)判断账户是否已经存在;
3)若合法并且不存在,则创建新用户;
4)生成token;
5)token即用户信息存入redis;
6)返回给前端token.

登录拦截器

1)自定义拦截器实现 HandlerInterceptor 接口,重写 preHandle() 方法。

2)拦截器注册到容器中,即在实现了WebMvcConfigrer的类中配置拦截器

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new loginInterceptor())
                .addPathPatterns("/**");//拦截的路径

                .addExcludePathPatterns("/login");  //放行的路径
    }

3)获取token   request.getHeader("Authorization");  判断token是否为空,为空未登录,进行拦截

return false;

4)token不为空,去做认证 loginService.checkToken(token); 由于token中保存了用户id,查询id是否存在就行

5)验证成功,放行 return true;

发布文章

发布文章要实现三个功能,文章分类获取、文章标签获取、发布功能实现。

首先查询所有的文章分类,和文章标签。

1)从前端就收到文章相关数据
2)Article表中存入文章相关属性;
3)Article_tag表中存入标签和文章id;
4)Article_body表中存入文章内容。

头像文件上传与下载

文件上传

1)controller中接收的参数类型必须为 MultipartFile  参数名要与表单中的name属性名称相同

文件上传的大小可以在配置文件中设置

@PostMapping

public Result upload(MultipartFile  file){

  file.transferTo(new File("D:\")) ;  // 文件转存的位置

}

文件下载

@GettMapping

public Result upload(String name,HttpServletResponse response){

  //输入流读取文件内容

FileInputStream fileInputStream= new FileInputStream(new File("D:\"));  //写文件上传的位置

//输出流将文件写回浏览器

ServletOutputStream outputStream= response.getOutputStream();

int len=0;

byte[] bytes=new byte[1024].

while(   (len=fileInputStream.read(bytes))  !=-1 ){

outputtream.write(bytes,0,len);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值