javaweb-day10:综合案例

1.基础知识

在这里插入图片描述

2.环境搭建

在这里插入图片描述

3.Restful风格的开发规范

在这里插入图片描述

4. 开发流程

在这里插入图片描述


正式开发

5.部门管理

5.1 查询部门

在这里插入图片描述

6.文件上传

6.1 文件上传三要素

在这里插入图片描述

(1)本地存储–生成随机名称

@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile file) throws IOException {
        log.info("文件上传:{},{},{}",username,age,file);
        //将文件保存到本地服务器
        //1.获取原始文件名
        String originalFilename=file.getOriginalFilename();
        //2.生成新文件名
        String tmp=originalFilename.substring(originalFilename.lastIndexOf("."));   //文件后缀
        String newFilename= UUID.randomUUID()+tmp;
        log.info("新的文件名为:{}",newFilename);
        //3.将文件保存在本地服务器磁盘的特定位置
        file.transferTo(new File("E:\\1\\"+newFilename));
        return Result.success();
    }

}

(2)云服务器存储

package com.xylearn.utils;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {

    private String endpoint = "http://oss-cn-shanghai.aliyuncs.com";
    //说明:用EnvironmentVariableCredentialsProvider的话,要先根据官方文档去设置环境变量,重启电脑才生效
    EnvironmentVariableCredentialsProvider credentialsProvider =
            CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
//    String accessKeyId = "填你的accessKeyId";
//    String accessKeySecret = "填你的accessKeySecret";
    private String bucketName = "web-framework0011111";

    public AliOSSUtils() throws ClientException {
    }

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSSClient ossClient = new OSSClient(endpoint, credentialsProvider);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

总结
在这里插入图片描述

7.参数配置化

(1)配置文件
在这里插入图片描述
(2)Yaml配置文件
在这里插入图片描述
在这里插入图片描述
(3)@ConfigurationProperties注解
在这里插入图片描述

8.登录

8.1 会话

在这里插入图片描述

8.1.1 基于cookie的会话跟踪技术

在这里插入图片描述
在这里插入图片描述

8.1.2 JWT令牌

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.1.3 登录校验-过滤器Filter

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

package com.xylearn.filter;

import com.alibaba.fastjson2.JSONObject;
import com.xylearn.pojo.Result;
import com.xylearn.utils.JwtUtils;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.io.IOException;

@Slf4j
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {

    /**
     * 完成登录校验
     *
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //获取请求的url
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String url = request.getRequestURL().toString();
        log.info("请求的url{}", url);
        //判断是否为登录请求,登录请求直接放行
        if (url.contains("login")) {
            log.info("登录操作,放行...");
            filterChain.doFilter(request, response);
            return;
        }

        //获取请求头中的令牌token
        String jwt = request.getHeader("token");
        //判断令牌是否存在,不存在返回错误
        if (!StringUtils.hasText(jwt)) {
            log.info("请求头token为空,返回未登录信息");
            Result error = Result.error("NOT LOGIN");
            String s = JSONObject.toJSONString(error);
            response.getWriter().write(s);
            return;
        }
        //令牌存在,解析,若解析失败返回错误
        try {
            JwtUtils.parseJWT(jwt);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("jwt解析失败,返回未登录信息");
            Result error = Result.error("NOT LOGIN");
            String s = JSONObject.toJSONString(error);
            response.getWriter().write(s);
            return;
        }
        //放行
        filterChain.doFilter(request, response);
    }

}

8.1.4 登录校验-拦截器Interceptor

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

9.异常处理

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值