文章 119
评论 29
浏览 34510
Oauth2 自定义异常信息返回(springboot无法全局捕获invalid_client,unauthorized,invalid_token)

Oauth2 自定义异常信息返回(springboot无法全局捕获invalid_client,unauthorized,invalid_token)

@[toc] 在SpringBoot当中使用Oauth2的时候,发现部分Oauth2的异常无法被springboot的ControllerAdvance全局异常捕获!!! 特此记录下相关的处理方式:

SpringBoot+Mybatis-plus:使用枚举接收参数并返回数据

SpringBoot+Mybatis-plus:使用枚举接收参数并返回数据

SpringBoot+Mybatis-plus:使用枚举接收参数并返回数据 最近项目当中大量使用到枚举,特此记录下项目当中使用枚举的好处,场景,使用方式。 枚举的好处 可读性高, 易理解 统一参数类型,避免传参错误 线程安全,全局唯一,无法修改 枚举使用场景 在实际的使用当中,当某个对象或者某个属性,需要有多个可供选择的状态或者描述,例如人的性别,支付的状态,错误的类型等等,都可以使用枚举。 枚举在项目中的使用 通常在项目当中会存在两种形式的枚举 第一种形式 /** * 性别枚举 * * @author hjljy */ @Getter public enum SexEnum { /** * 性别枚举 */ DEFAULT(-1, "保密"), WOMAN(0, "女"), MAN(1, "男"); @EnumValue //标记存储到数据库的值 @JsonValue //标记json返回的值 private final Integer code; private final String remark; SexEnum(Integer code, String remark) {....

Springboot2.x处理Long类型返回前端精度丢失以及LocalDateTime统一返回时间戳

Springboot2.x处理Long类型返回前端精度丢失以及LocalDateTime统一返回时间戳

最近在返回给前端数据的时候遇到了1 Long类型返回前端精度丢失 2LocalDateTime统一返回时间戳方便前端统一处理的问题,记录下解决方案。 代码如下 环境:springboot2.x ,JDK8 import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import....

springboot2.0整合OAuth2并使用JWT作为token

springboot2.0整合OAuth2并使用JWT作为token

之前实现了Springboot之Security前后端分离登录 刚好这段时间有空,乘机整合下OAuth2。记录下当中遇到的问题和处理方式。

SpringBoot使用@ControllerAdvice配合ResponseBodyAdvice记录接口请求参数以及返回数据

SpringBoot使用@ControllerAdvice配合ResponseBodyAdvice记录接口请求参数以及返回数据

最近在项目当中需要记录接口请求参数以及返回数据,本来是打算通过自定义切面来实现的,后来发现可以使用@ControllerAdvice配合ResponseBodyAdvice来进行记录数据,特此记录,完整代码如下: /** * @author yichaofan * @since 2020/11/20 12:47 * @apiNote 统一打印请求参数和返回参数日志 */ @ControllerAdvice @Slf4j public class ResponseBodyAnalysis implements ResponseBodyAdvice { /** * 参数返回给前端之前进行,可以进行相关的处理例如,记录请求参数,响应参数,封装统一响应参数等操作 * * 源代码注释如下: * Invoked after an {@code HttpMessageConverter} is selected and just before * its write method is invoked. * @param body the body to be written * @param re....

Springboot之Security前后端分离登录

Springboot之Security前后端分离登录

什么是Spring Security Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。 Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求 官方网站:https://spring.io/projects/spring-security#learn

Springboot读取自定义属性之集合(list,数组)

Springboot读取自定义属性之集合(list,数组)

springboot配置文件的读取操作很常见,之前也写过简单的读取配置文件的笔记SpringBoot学习之DAY_02 springboot配置文件信息读取 这篇笔记主要记录下最近在读取配置文件当中的心得和新知识点吧。

SpringBoot整合Druid+全局事务管理+Mybatis-Plus+代码生成器

SpringBoot整合Druid+全局事务管理+Mybatis-Plus+代码生成器

SpringBoot整合Druid+全局事务管理+Mybatis-Plus+代码生成器 在springboot开发当中,Druid,全局事务管理,代码生成器都是非常实用的,特此记录下整合的过程

springboot之aop切面execution表达式,@args,@annotation

springboot之aop切面execution表达式,@args,@annotation

最近在使用springboot进行切面编程的时候,发现定义切面点有很多种方式,每种方式有每种方式的特点。特此记录

Springboot之swagger-bootstrap-ui(knife4j)

Springboot之swagger-bootstrap-ui(knife4j)

最近在网上看到一个比较好的swagger-ui,swagger自带的UI不是很友好。特此记录下整合过程,并梳理下swagger相关的知识

SpringBoot2.2.x版本添加CORS跨域访问支持

SpringBoot2.2.x版本添加CORS跨域访问支持

看项目代码看到一个CORS跨域访问配置类,特此了解下什么是CORS跨域,以及Springboot 2.2.x版如何支持CORS跨域请求!!!

Springboot之Actuator服务监控

Springboot之Actuator服务监控

最近在项目当中,启动了多个微服务项目,想着如何监控启动的项目,然后就找到了Actuator这个东西!!!总结下自己学习到的知识点!!!

springboot之线程池ThreadPoolTaskExecutor以及@Async异步注解

springboot之线程池ThreadPoolTaskExecutor以及@Async异步注解

前言 最近项目当中有需求,要进行异步的处理,需要使用到线程池,很久没有使用到线程池了,一来是做JAVAweb开发基本上很少用到异步处理,二来是发现有的老项目里面,线程和线程池的使用比较混乱,有好几个线程池,有的线程池是通过spring管理的,有的是自己创建的,然后有的地方是直接创建的线程。所以这里记录下自己在项目当中如何优雅的使用线程池!避免项目当中到处都是线程池!!!

Springboot之分组验证以及自定义参数验证

Springboot之分组验证以及自定义参数验证

springboot之前端参数验证 学习完简单的验证之后发现基本能满足百分之80的验证需求,接下来深入学习下验证。

springboot之前端参数验证

springboot之前端参数验证

对于任何一个应用而言,在客户端做的数据有效性验证主要目的是规范用户的输入,而真实的数据验证工作都是在服务后端代码当中实现的,但在实际的项目当中,也经常会因为各种各样的原因:懒得写,觉得前端验证了,后端没有太多的必要等等没有进行数据验证,其实养成数据的有效性验证是一个非常好的习惯。 1 可以避免很多数据有效性导致的BUG,防范其余开发者的基础攻击 2 在前后端进行接口联调的时候,不需要因为参数的问题沟通很久。

通过springboot拦截器实现博客文章的自定义URL地址

通过springboot拦截器实现博客文章的自定义URL地址

最近写博客,看见博客系统可以自定义文章的路径。很好奇这个是如何实现的,就想着自己来实现一下。 实现思路 1 既然是自定义的 url 地址,那么肯定要保存到数据库。 2 拦截所有的请求,然后判断请求的地址是不是一个博文的自定义 url 地址。 3 如果是就重定向或者转发到博文统一展示页(重定向或者转发时将博文的 ID 传过去)。 4 博文统一展示页就通过博文的 id 就可以展示文章内容了。 拦截器学习 既然是通过拦截器实现,那么就需要知道该在何时拦截,如何在拦截器当中实现重定向跳转等等。 /** * @author 海加尔金鹰 www.hjljy.cn **/ public class MlogPathInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } @Override....

SpringBoot之文件批量上传和下载

SpringBoot之文件批量上传和下载

SpringBoot 文件的批量上传和批量下载 之前学习并使用过文件的单个上传:springboot学习日志之DAY08文件上传功能 最近写程序过程当中需要使用到批量上传和批量下载,批量和单个文件的上传下载还是有很多的区别的。特此记录

springboot整合MongoDB

springboot整合MongoDB

什么是MongoDB? MongoDB是为现代应用程序开发人员和云时代构建的基于文档的通用分布式数据库 MongoDB Windows下的安装 网上安装教程一大堆,不过官方网站的教程最详细:官网windows下安装MongoDB 安装完毕之后如果不出错的话,就可以在计算机的服务里面找到一个:MongoDB Server 的服务。 MongoDB 数据库 成功安装之后,可以通过安装目录bin下的mongo.exe 连接上MongoDB 数据库。输入help 可以查看相关帮助信息。 常用操作: show dbs 查看全部数据库 use dbname 切换到指定名称数据库,如果没有就创建 show collections 获取指定数据库下的所有集合 db.createCollection("user") 在当前数据库下创建一个名为 user的集合 db.user.insert({"name":"hjljy","age":18}) 向user集合里面插入一条数据 db.user.find() 查看user集合全部数据 其他操作见help或者官方网站说明:https://docs.mong.......

springboot整合dubbo2.7.x版本

springboot整合dubbo2.7.x版本

什么是Dubbo? Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 是的,是 Apache Dubbo,不在是Alibaba Dubbo。原因简单来说就是Alibaba 将dubbo 移交给Apache开源社区进行维护。 详情见这两篇文章: Dubbo正式进入Apache开源孵化器 从遇见到信任 | Apache Dubbo 的毕业之旅 Dubbo2.7.x版本变化 JDK版本需求上升到1.8 包名更换:com.alibaba.dubbo - > org.apache.dubbo 注册中心一分为三,变成注册中心,元数据中心,配置中心 异步支持优化 服务治理规则优化 ...... Dubbo生态系统 此图来源于Dubbo官网 SpringBoot 整合Dubbo2.7.x 环境信息: JDK 1.8 SpringBoot 2.2.1 Dubbo 2.7.4.1 准备工具:zookeeper 官网下载地址,新版dubbo_admin 官网下....

springboot拦截器自动注入为null解决办法和具体原因分析

springboot拦截器自动注入为null解决办法和具体原因分析

最近在使用springboot拦截器的过程当中,发现无法注入service,提示NPE错误 问题相关代码 springboot拦截器注册方式: @Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SessionInterceptor()).excludePathPatterns("/static/").addPathPatterns("/"); } } 拦截器代码: public class SessionInterceptor implements HandlerInterceptor { @Autowired private IUserService userService; @Override public boolean preHandle(HttpServletReques....

一个菜鸟程序员的踩坑日记