阅读量:0
目录
@ConfigurationProperties与@Value的区别
整体思路:
具体实施:
启动类下有四个子包,分别为Controller层、Mapper层,Service层(接口和实现类)
在Controller层面向Service层接口创建对象,调用Service的方法,Service层面向Mapper层接口创建对象,调用Mapper层方法执行SQL语句,将数据返回给Service,Service将结果返回Controller,Controller将结果响应给前端
准备步骤
环境搭建
开发规范
Restful
案例
部门管理
查询部门
Controller层
Service层
Mapper层
删除部门
Controller层
Service层
Mapper层
新增部门
Controller层
Service层
Mapper层
修改部门
修改部门需要两步:先查询再修改
查询部门
Controller层
Service层
Mapper层
修改部门
Controller层
Service层
Mapper层
员工管理
分页条件查询(其他略)
Controller层
Service层
Mapper层
xml配置文件
文件上传
介绍
文件上传(本地存储)
存储到指定目录
将文件存到指定目录中:
获取原始文件名:文件表单名,文件名,文件类型存在MultipartFile类的对象中,因此可以通过调用其中的方法来获得原始文件名(getOriginalFilename()方法)
注意:transferto中路径最后//+文件名
使用UUID
保证文件名称唯一,使得后来上传的文件不会覆盖原有的同名文件
uuid:通用唯一识别码--长度固定的唯一字符串
生成uuid例:
获得文件扩展名:拿到原始文件名,获得最后一个点所处位置,截取到最后转为string
最大上传大小
单个文件最大上传大小和单词请求最大上传大小:(进行如下配置)
MultipartFile常用方法
文件上传(云存储)--阿里云对象存储服务OSS
对云存储的通用使用步骤:(包含但不局限于阿里云OSS)
使用步骤:准备工作->参照官方SDK编写入门程序->案例集成OSS
阿里云-集成
配置文件
参数配置化
使用@Value注解将外部配置的属性值注入到成员变量
yml配置文件
yml
yml常见数据格式
yml样例配置(本地)
@ConfigurationProperties
@ConfigurationProperties与@Value的区别
将文件上传到静态自定义资源包
配置文件需要加入:
获取到静态资源的路径:
登录校验
概述
会话技术
Cookie
Session
令牌技术(主流技术!!)
JWT令牌
JWT
JWT-生成
JWT-校验
过滤器Filter
Filter入门程序
Filter拦截路径
过滤器链
一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链
过滤器拦截顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序
登录校验-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); } }
拦截器Interceptor
Interceptor入门小程序
首先三个默认方法(根据需要使用或重写)