202101-27 解决Spring Security 用户帐号已被锁定问题 1、问题描述主要就是org.springframework.security.authentication.LockedException:用户帐号已被锁定这个异常,完整异常如下:[2020-05-0916:07:00下午]:DEBUGorg.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider$DefaultPreAuthenticationChecks.check(AbstractUserDetailsAuthenticationProvider.java:353)Useraccountislocked[2020-05-0916:07:00下午]:DEBUGorg.springfram... 继续阅读 >
202101-27 Spring security 自定义过滤器实现Json参数传递并兼容表单参数(实例代码) 依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optio... 继续阅读 >
202101-27 Spring MVC获取HTTP请求头的两种方式小结 1前言请求是任何Web服务要关注的对象,而请求头也是其中非常重要的信息。本文将通过代码讲解如何在SpringMVC项目中获取请求头的内容。主要通过两种方式获取:(1)通过注解@RequestHeader获取,需要在Controller中显式获取;(2)通过RequestContextHolder获取,可以任何地方获取。接下来通过代码讲解。2通过注解@RequestHeader获取需要在Controller中显示使用@RequestHeader。2.1获取某个请求头只获取其中一个请求头,相当容... 继续阅读 >
202101-27 如何在Spring WebFlux的任何地方获取Request对象 1不一样的世界在常规的SpringWeb项目中,我们要获取Request对象是非常方便的,不少库都提供了静态方法来获取。获取代码如下:ServletRequestAttributesrequestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();//gettherequestHttpServletRequestrequest=requestAttributes.getRequest();在类RequestContextHolder提供了静态方法,也就意味着你可以在任何地方调用。而它使用了Thread... 继续阅读 >
202101-26 Spring Boot 2结合Spring security + JWT实现微信小程序登录 项目源码:https://gitee.com/tanwubo/jwt-spring-security-demo登录通过自定义的WxAppletAuthenticationFilter替换默认的UsernamePasswordAuthenticationFilter,在UsernamePasswordAuthenticationFilter中可任意定制自己的登录方式。用户认证需要结合JWT来实现用户认证,第一步登录成功后如何颁发token。publicclassCustomAuthenticationSuccessHandlerimplementsAuthenticationSuccessHandler{@AutowiredprivateJwtTo... 继续阅读 >
202101-22 Spring Boot 2.x基础教程之配置元数据的应用 在使用SpringBoot开发应用的时候,你是否有发现这样的情况:自定义属性是有高量背景的,鼠标放上去,有一个Cannotresolveconfigurationproperty的配置警告。如果不对于这个警告觉得烦,想要去掉,那么可以通过设置来去除:但是,我的建议是不要去掉,因为这个警告正好可以通过高亮来区分你的自定义配置以及框架配置,可以让你快速的分辨哪些是自定义的。如果你实在想去掉,那么也不建议用上面说的方法,而是建议通过完善配置元... 继续阅读 >
202101-22 Spring Initializr中生成的mvnw有什么用 当我们使用SpringInitializr来创建SpringBoot工程的时候,有没有发现在工程根目录下有两个名为mvnw的文件:从命名、图标、扩展名来猜测,这两个文件的作用应该是一样的,只是cmd文件应该是用在windows下跑的,而另外一个则是用于linux环境下跑的。那么这个文件到底是用来做什么呢?下面我们一起尝试了解一下:第一步:打开读一下因为内容较多,我这里就不放出来了。内容也非常易懂,只要你了解shell和maven,就能知道这个脚本主... 继续阅读 >
202101-22 spring boot 实现配置多个DispatcherServlet最简单方式 传统的web项目,只需要在web.xml里配置多个即可,并且支持多个url-pattern在springboot中,我们默认无需配置,系统会自动装配一个,感兴趣的可以看下源码org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration里面有个DispatcherServletRegistrationBean,关键是这里只能指定一个path,如下的源码截图如果想要指定多个,我们只能自己写DispatcherServletRegistrationBean这个Bean了,那么系统... 继续阅读 >
202101-22 手撸一个 spring-boot-starter的全过程 我们使用SpringBoot,基本上都是沉醉在它Stater的方便之中。Starter为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小伙伴会觉得这个Starter好神奇呀!其实Starter也都是Spring+SpringMVC中的基础知识点实现的,接下来带大家自己来撸一个Starter,慢慢揭开Starter的神秘面纱!核心知识其实Starter的核心就是条件注解@Conditional,当classpath下... 继续阅读 >
202101-22 最优雅地整合 Spring & Spring MVC & MyBatis 搭建 Java 企业级应用(附源码) 这里使用Maven项目管理工具构建项目初始化项目打开IntellijIDEA,点击CreateNewProject选择Maven构建项目选择JDK版本选择maven-archetype-webapp模板(JavaWeb项目)填写项目在Maven仓库中的坐标(在Maven仓库中根据这个坐标才能找到该项目)选择Maven路径选择Maven配置文件路径选择Maven本地仓库路径填写项目名选择工作目录创建目录在src>main目录下分别新建java源码目录和reso... 继续阅读 >
202101-21 浅析Spring Boot单体应用熔断技术的使用 壹、入围方案Sentinelgithub地址:https://sentinelguard.io/zh-cn/docs/introduction.html阿里出品,SpringCloudAlibaba限流组件,目前持续更新中自带Dashboard,可以查看接口Qps等,并且可以动态修改各种规则流量控制,直接限流、冷启动、排队熔断降级,限制并发限制数和相应时间系统负载保护,提供系统级别防护,限制总体CPU等主要核心:资源,规则(流量控制规则、熔断降级规则、系统保护规则、来源访问控制规... 继续阅读 >
202101-21 Spring 实现自定义监听器案例 应用场景:在一般的javaWeb项目中经常有一些缓存是需要再项目启动的时候加载到内存中,这样就可以使用自定义的监听器来实现。1、在web.xml中声明<!--自定义监听启动加载系统参数--><listener><listener-class>com.cn.framework.constant.OmsConfigLoader</listener-class></listener>2、创建类OmsConfigLoader实现接口ServletContextListener,项目启动的时候service还没有注入,此时调用service的方法会报错,因为在web容... 继续阅读 >
202101-21 在Spring 中使用@Aspect 控制自定义注解的操作 Spring中使用@Aspect控制自定义注解看这篇介绍@Aspect1.定义系统日志注解类@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceSysLog{Stringvalue()default"";}2.定义切面处理类packagecom.kxs.common.aspect;importcom.google.gson.Gson;importcom.kxs.common.annotation.SysLog;importcom.kxs.common.utils.HttpContextUtils;importcom.kxs.common.utils.IPUtils;import... 继续阅读 >
202101-21 基于Spring AOP @AspectJ进阶说明 @AspectJ可以使用切点函数定义切点,我们还可以使用逻辑运算符对切点进行复核运算得到复合的切点,为了在切面中重用切点,我们还可以对切点进行命名,以便在其他的地方引用定义过的切点。当一个连接点匹配多个切点时,需要考虑织入顺序的问题,此外一个重要的问题是如何再增强中访问连接点上下文的信息。Waiter接口:packagecom.yyq.aspectJAdvanced;publicinterfaceWaiter{voidgreetTo(Stringname);voidserveTo(Stringn... 继续阅读 >
202101-21 Spring Boot 2.x 把 Guava 干掉了选择本地缓存之王 Caffeine(推荐) 环境配置:JDK版本:1.8Caffeine版本:2.8.0SpringBoot版本:2.2.2.RELEASE一、本地缓存介绍缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。之前介绍过Redis这种NoSql作为缓存组件,它能够很好的作为分布式缓存组件提供多个服务间的缓存,但是Redis这种还是需要网络开销,增加时耗。本地缓存是直接从本地内存中读取,没有网络开... 继续阅读 >
202101-21 详解Spring注入集合(数组、List、Map、Set)类型属性 注入集合(数组、List、Map、Set)类型属性(1)创建类,定义数组,list,map,set类型属性,并且生成对应的set方法。(2)在spring配置文件中进行配置。Stu类:packagecom.Keafmd.spring5.collectiontype;importjava.util.Arrays;importjava.util.List;importjava.util.Map;importjava.util.Set;/***Keafmd**@ClassName:Stu*@Description:IOC操作Bean管理(xml注入属性集合)*@author:牛哄哄的柯南*@date:2021-... 继续阅读 >