目录
整体思路:
具体实施:
准备步骤
环境搭建
开发规范
Restful
案例
部门管理
查询部门
Controller层
Service层
Mapper层
删除部门
Controller层
Service层
Mapper层
新增部门
Controller层
Service层
Mapper层
修改部门
查询部门
Controller层
Service层
Mapper层
修改部门
Controller层
Service层
Mapper层
员工管理
分页条件查询(其他略)
Controller层
Service层
Mapper层
xml配置文件
文件上传
介绍
文件上传(本地存储)
存储到指定目录
使用UUID
最大上传大小
MultipartFile常用方法
文件上传(云存储)--阿里云对象存储服务OSS
阿里云-集成
配置文件
参数配置化
yml配置文件
yml
yml常见数据格式
yml样例配置(本地)
@ConfigurationProperties
@ConfigurationProperties与@Value的区别
将文件上传到静态自定义资源包
登录校验
概述
会话技术
Cookie
Session
令牌技术(主流技术!!)
JWT令牌
JWT
JWT-生成
JWT-校验
过滤器Filter
Filter入门程序
Filter拦截路径
过滤器链
登录校验-Filter
拦截器Interceptor
Interceptor入门小程序
拦截路径
拦截器执行流程
登录校验-Interceptor拦截器
全局异常处理
启动类下有四个子包,分别为Controller层、Mapper层,Service层(接口和实现类)
在Controller层面向Service层接口创建对象,调用Service的方法,Service层面向Mapper层接口创建对象,调用Mapper层方法执行SQL语句,将数据返回给Service,Service将结果返回Controller,Controller将结果响应给前端
修改部门需要两步:先查询再修改
将文件存到指定目录中:
获取原始文件名:文件表单名,文件名,文件类型存在MultipartFile类的对象中,因此可以通过调用其中的方法来获得原始文件名(getOriginalFilename()方法)
注意:transferto中路径最后//+文件名
保证文件名称唯一,使得后来上传的文件不会覆盖原有的同名文件
uuid:通用唯一识别码--长度固定的唯一字符串
生成uuid例:
获得文件扩展名:拿到原始文件名,获得最后一个点所处位置,截取到最后转为string
单个文件最大上传大小和单词请求最大上传大小:(进行如下配置)
对云存储的通用使用步骤:(包含但不局限于阿里云OSS)
使用步骤:准备工作->参照官方SDK编写入门程序->案例集成OSS
使用@Value注解将外部配置的属性值注入到成员变量
配置文件需要加入:
获取到静态资源的路径:
一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链
过滤器拦截顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序
在Filter中校验Jwt令牌的有效性
@WebFilter(urlPatterns = "/*") public class LoginCheckFilter implements Filter { private static final Logger log = LoggerFactory.getLogger(LoginCheckFilter.class); @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; //获取url String url = req.getRequestURL().toString(); log.info("获得url:{}",url); //判断请求中是否包含login,如果包含,说明是登录操作,放行 if (url.contains("login")) { log.info("登录操作,放行!"); filterChain.doFilter(servletRequest, servletResponse); return; } //获取请求头中的令牌 String jwt = req.getHeader("token"); //判断令牌是否存在,如果不存在,则返回错误信息 if(!StringUtils.hasLength(jwt)) { log.info("请求头token为空,返回未登录的信息"); Result error = Result.error("NOT_LOGIN"); //手动转换 对象-->json 阿里巴巴fastJson String notLogin = JSON.toJSONString(error); resp.getWriter().write(notLogin); return; } //解析token,如果解析失败,返回错误结果 try { JwtUtils.parseJWT(jwt); } catch (Exception e) { e.printStackTrace(); log.info("解析令牌失败,返回未登录错误信息"); Result error = Result.error("NOT_LOGIN"); //手动转换 对象-->json 阿里巴巴fastJson String notLogin = JSON.toJSONString(error); resp.getWriter().write(notLogin); return; } //放行 log.info("令牌合法,放行"); filterChain.doFilter(servletRequest, servletResponse); } }
首先三个默认方法(根据需要使用或重写)