首页
关于
友情链接
Search
1
Mybatis-动态SQL
93 阅读
2
Mybatis-XML映射文件
80 阅读
3
springboot配置文件yml
80 阅读
4
Mybatis-基础操作
79 阅读
5
拦截器(Interceptor)
74 阅读
学习记录
MySql
Java
vue
Mybatis
默认分类
代码记录
项目搭建教程
go项目
源码分享
经验分享
登录
Search
标签搜索
java
mysql
Mybatis
spring boot
编程
lombok
go
MinDoc
JAVAweb
Typecho
累计撰写
16
篇文章
累计收到
1
条评论
首页
栏目
学习记录
MySql
Java
vue
Mybatis
默认分类
代码记录
项目搭建教程
go项目
源码分享
经验分享
页面
关于
友情链接
搜索到
3
篇与
的结果
2023-06-05
拦截器(Interceptor)
概述概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。 作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。 Interceptor 快速入门定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。 注册拦截器@Component public class LoginCheckInterceptor implements HandlerInterceptor { @Override //目标资源方法运行前运行, 返回true: 放行, 放回false, 不放行 public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { System.out.println("收到请求 ..."); return true; } @Override //目标资源方法运行后运行 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle ..."); } @Override //视图渲染完毕后运行, 最后运行 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); } } @Configuration //配置类 public class WebConfig implements WebMvcConfigurer { @Autowired private LoginCheckInterceptor loginCheckInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { //注册拦截器 /**拦截所有资源 /*拦截一级目录 registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**"); } }拦截器-拦截路径 @Override public void addInterceptors(InterceptorRegistry registry) { //注册拦截器 /**拦截所有资源 /*拦截一级目录 registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login"); }拦截器-执行流程Filter 与 Interceptor不同接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口。 拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截Spring环境中的资源。登录校验例子package com.tlias.interceptor; import com.alibaba.fastjson.JSONObject; import com.tlias.pojo.Result; import com.tlias.utils.JwtUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @Slf4j @Component public class LoginCheckInterceptor implements HandlerInterceptor { @Override //目标资源方法运行前运行, 返回true: 放行, 放回false, 不放行 public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { //1.获取请求url。 String url = req.getRequestURL().toString(); log.info("LoginCheckInterceptor 请求的url: {}",url); //2.判断请求url中是否包含login,如果包含,说明是登录操作,放行。 if(url.contains("login")){ //已被排除 log.info("登录操作, 放行..."); return true; } //3.获取请求头中的令牌(token)。 String jwt = req.getHeader("token"); //4.判断令牌是否存在,如果不存在,返回错误结果(未登录)。 if(!StringUtils.hasLength(jwt)){ log.info("请求头token为空,返回未登录的信息"); Result error = Result.error("NOT_LOGIN"); //手动转换 对象--json --------> 阿里巴巴fastJSON String notLogin = JSONObject.toJSONString(error); resp.getWriter().write(notLogin); return false; } //5.解析token,如果解析失败,返回错误结果(未登录)。 try { JwtUtils.parseJWT(jwt); } catch (Exception e) {//jwt解析失败 e.printStackTrace(); log.info("解析令牌失败, 返回未登录错误信息"); Result error = Result.error("NOT_LOGIN"); //手动转换 对象--json --------> 阿里巴巴fastJSON String notLogin = JSONObject.toJSONString(error); resp.getWriter().write(notLogin); return false; } //6.放行。 log.info("令牌合法, 放行"); return true; //真 放行 假 拦截 } @Override //目标资源方法运行后运行 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle ..."); } @Override //视图渲染完毕后运行, 最后运行 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); } }
2023年06月05日
74 阅读
0 评论
0 点赞
2023-05-30
springboot配置文件yml
配置格式SpringBoot提供了多种属性配置方式1,application.propertiesserver.port=8080 server.address=127.0.0.12,application.ymlserver: port: 8080 address: 127.0.0.13,application.yamlserver: port: 8080 address: 127.0.0.1yml基本语法 大小写敏感 数值前边必须有空格,作为分隔符 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格) 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 符号# 表示注释,从这个字符一直到行尾,都会被解析器忽略yml数据格式1对象/Map集合user: name: zhangsan age: 18 password: 1234562数组/List/Set集合hobby: - java - game - sport配置文件读取配置文件内容#阿里云OSS aliyun: oss: endpoint: https://o accessKeyId: LTAI4GC accessKeySecret: yBshY bucketName: we1使用注解 @Value是spring boot的java代码@SpringBootTest class TliasApplicationTests { @Value("aliyun.oss.endpoint") String a; @Test void contextLoads() { System.out.println("这是a:"+a); } }aliyun.oss.endpoint 为yml文件中的路径2自动获取绑定@Data @Component @ConfigurationProperties(prefix = "aliyun.oss") public class AliOSSProperties { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; }1.类中的属性名要与配置中的key一致 类属性endpoint与配置文件中的bucketName一致 2.将这个实体类交给ioc容器管理 加入注解@Component 3.指定前缀 @ConfigurationProperties(prefix = "前缀") bucketName的完整路径为aliyun.oss.bucketName
2023年05月30日
80 阅读
0 评论
0 点赞
2023-05-30
springboot文件上传
代码package com.tlias.controller; import com.tlias.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.util.UUID; @Slf4j @RestController public class UploadController { @PostMapping("/upload") public Result upload(String username, Integer age , MultipartFile image)throws Exception{ log.info("文件上传: {}, {}, {}", username, age, image); //获取原始文件名 - 1.jpg 123.0.0.jpg String originalFilename = image.getOriginalFilename(); //构造唯一的文件名 (不能重复) - uuid(通用唯一识别码) de49685b-61c0-4b11-80fa-c71e95924018 int index = originalFilename.lastIndexOf("."); String extname = originalFilename.substring(index); String newFileName = UUID.randomUUID().toString() + extname; log.info("新的文件名: {}", newFileName); //将文件存储在服务器的磁盘目录中 E:\images image.transferTo(new File("E:\\images\\"+newFileName)); return Result.success(); } } MultipartFile相关方法String getOriginalFilename(); //获取原始文件名 void transferTo(File dest); //将接收的文件转存到磁盘文件中 long getSize(); //获取文件的大小,单位:字节 byte[] getBytes(); //获取文件内容的字节数组 InputStream getInputStream(); //获取接收到的文件内容的输入流解决文件上传大小限制#单个文件最大限制 spring.servlet.multipart.max-file-size=20MB #单个请求最大限制 spring.servlet.multipart.max-request-size=200MB
2023年05月30日
50 阅读
0 评论
0 点赞