spring框架

解决Spring Security自定义filter重复执行问题

拥有回忆 提交于 2020-02-10 20:44:56
今天做项目的时候,发现每次拦截器日志都会打两遍,很纳闷,怀疑是Filter被执行了两遍。结果debug之后发现还真是!记录一下这个神奇的BUG! 问题描述 项目中使用的是Spring-security作为权限框架,然后做了一个 JwtAuthenticationTokenFilter 作为拦截器拦截请求,校验Token,但是每次请求都会打两遍日志。下面是精简的源代码: 自定义的Filter类 @Slf4j @Component public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { //...省略 //打出两遍日志的地方 log.info("User:{} request path:{}, method:{}, param:{}", username, request.getServletPath(), request.getMethod(), request

Spring学习沉淀

旧城冷巷雨未停 提交于 2020-02-10 20:21:52
Spring学习沉淀 基本概念 Reactive && Servlet Reactive Servlet Spring注解总结 装配bean 配置类Config Bean 测试类 源码学习 依赖注入和控制反转(spring容器) 应用上下文(ApplicationContext) BeanFactory Bean创建过程 一个简单的demo: IOC容器启动流程 面向切面 AOP基本理论 SpringAop 和 AspectJ 的关系 Spring AOP 基本用法及名词解释 AOP源码解析 参考链接: 基本流程: ProxyFactory详解: 基本概念 来自Spring官网的定义:End-to-end support for reactive & servlet based apps on the JVM. 理解:为在JVM上运行的基于reactive和servlet的应用提供一个端到端的支持(应该是封装了一些基于Reactive和Servlet的应用所应具备的基本逻辑,基于spring框架的开发不用感知这些事情) Reactive && Servlet Reactive 定义:Reactive响应式(反应式)编程 是一种新的编程风格 1)react to events对事件立即反应,事件驱动的自然特性使的反应能够立即加载实施,通过避免对共享资源的争用实现可扩展性。 2

Spring Event事件驱动

混江龙づ霸主 提交于 2020-02-10 19:32:18
Spring事件驱动模型,简单来说类似于Message-Queue消息队列中的Pub/Sub发布/订阅模式,也类似于Java设计模式中的观察者模式。 自定义事件 Spring的事件接口位于 org.springframework.context.ApplicationEvent ,源码如下: public abstract class ApplicationEvent extends EventObject { private static final long serialVersionUID = 7099057708183571937L; private final long timestamp; public ApplicationEvent(Object source) { super(source); this.timestamp = System.currentTimeMillis(); } public final long getTimestamp() { return this.timestamp; } } 继承了Java的事件对象 EventObject ,所以可以使用 getSource() 方法来获取到事件传播对象。 自定义Spring事件 public class CustomSpringEvent extends ApplicationEvent {

Spring框架-第一篇

隐身守侯 提交于 2020-02-10 18:49:42
目录 第一章:认识Spring 1.1-Spring是什么 1.2-Spring的发展历程 1.3-Spring的优势 1.4-Spring体系结构 第二章:IOC及作用 2.1-高内聚、低耦合 2.2-解耦的几种方式 第三章:使用spring的IOC解决程序耦合 3.1-准备 3.2-快速入门 3.3-Spring 基于XML的IOC细节 3.4-spring 的依赖注入 第一章:认识Spring 1.1-Spring是什么 Spring 是 分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC (Inverse Of Control: 反转控制)和 AOP (Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。 1.2-Spring的发展历程 1997 年 IBM 提出了 EJB 的思想 1998 年,SUN 制定开发标准规范 EJB1.0 1999 年,EJB1.1 发布 2001 年,EJB2.0 发布 2003 年,EJB2.1 发布 2006 年,EJB3.0 发布 Rod Johnson(spring

徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!

蓝咒 提交于 2020-02-10 13:28:45
原文: https://mp.weixin.qq.com/s/tKr_shLQnvcQADr4mvcU3A 我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中。Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小伙伴会觉得这个 Starter 好神奇呀!其实 Starter 也都是 Spring + SpringMVC 中的基础知识点实现的,今天松哥就来带大家自己来撸一个 Starter ,慢慢揭开 Starter 的神秘面纱! 核心知识 其实 Starter 的核心就是条件注解 @Conditional ,当 classpath 下存在某一个 Class 时,某个配置才会生效,前面松哥已经带大家学习过不少 Spring Boot 中的知识点,有的也涉及到源码解读,大伙可能也发现了源码解读时总是会出现条件注解,其实这就是 Starter 配置的核心之一,大伙有兴趣可以翻翻历史记录,看看松哥之前写的关于 Spring Boot 的文章,这里我就不再重复介绍了。 定义自己的 Starter 定义 所谓的 Starter ,其实就是一个普通的 Maven 项目,因此我们自定义 Starter ,需要首先创建一个普通的 Maven 项目,创建完成后,添加 Starter 的自动化配置类即可,如下

about SpringBoot学习后记

﹥>﹥吖頭↗ 提交于 2020-02-10 13:06:53
<SpringBoot实战>第一章节入门的名称为Spring风云再起 看起来Spring的功能确实受Java开发者喜爱 在SpringBoot中,继续将Spring框架做了另一次的封装使框架内代码模块更加简洁 [ Original Spring ] 原来的Spring : 假设你受命用Spring开发一个简单的Hello World Web应用程序.你该做什么? >> * 一个项目结构中,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring MVC和 Servlet API这些依赖. * 一个web.xml文件 (或者一个WebApplicationInitializer实现),其中声明了Spring的DispatcherServlet (取代繁琐的多个Servlet) * 一个启用了Spring MVC的Spring配置. * 一个控制器类,以"Hello World"响应HTTP请求. * 一个用于部署应用程序的Web应用服务器,比如 Tomcat . 这份清单里只有一个东西是Hello World功能相关的,即控制器,剩下的都是Spring开发的Web应用程序必须的通用模板. 既然所有Spring Web应用程序都要用到它们,那为什么还要你来提供这些东西呢? [ SpringBoot Quintessence ] SpringBoot精华所在 :

SpringBoot简要介绍

可紊 提交于 2020-02-10 11:32:31
一 SpringBoot介绍 1.1 先从Spring谈起 我们知道Spring是重量级企业开发框架 Enterprise JavaBean(EJB) 的替代品,Spring为企业级Java开发提供了一种相对简单的方法,通过 依赖注入 和 面向切面编程 ,用简单的 Java对象(Plain Old Java Object,POJO) 实现了EJB的功能 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的(需要大量XML配置) 。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。 尽管如此,我们依旧没能逃脱配置的魔爪。开启某些Spring特性时,比如事务管理和Spring MVC,还是需要用XML或Java进行显式配置。启用第三方库时也需要显式配置,比如基于Thymeleaf的Web视图。配置Servlet和过滤器(比如Spring的DispatcherServlet)同样需要在web.xml或Servlet初始化代码里进行显式配置。组件扫描减少了配置量,Java配置让它看上去简洁不少,但Spring还是需要不少配置。 光配置这些XML文件都够我们头疼的了,占用了我们大部分时间和精力。除此之外,相关库的依赖非常让人头疼

第一轮面试题汇总

China☆狼群 提交于 2020-02-10 11:07:17
1.描述下数据库中的事务--ACID各个的特点 原子性(Atomicity):事务中的操作要么全部成功要么全部失败。 一致性(Consistency):事务前后数据的完整性必须保持一致。 隔离性(Isolation):多个并发的事务之间是相互隔离的,互不干扰的。 持久性(Durability):事务提交后,数据是永久改变的。 2.什么是springboot?你们公司是用的哪个版本? SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务。 Spring boot 的优点 轻松创建独立的Spring应用程序 内联Tomcat、jetty等web容器,不需要部署WAR文件。 提供一系列的“starter”来简化的Maven配置 开箱即用,尽可能自动配置Spring 版本号:2.1.6 3.什么是redis? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis优势 性能极高-Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型-Redis支持二进制案列的String,Lists,Hashes,Sets及Ordered Sets 数据类型操作。 原子—Redis的所有操作都是原子性(不可再分)的,意思就是要么成功执行要么失败不执行

Maven+SSM框架实现简单的增删改查

雨燕双飞 提交于 2020-02-10 02:57:12
Spring介绍: spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 简单来说, Spring 是一个轻量级的控制反转(IoC )和面向切面( AOP )的容器框架。 SpringMVC介绍 Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在Spring Web Flow 里面。 Spring MVC 分离了 控制器 、模型 对象 、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。 MyBatis介绍 MyBatis 本是 apache 的一个开源项目 iBatis , 2010 年这个项目由apache software foundation 迁移到了 google code ,并且改名为 MyBatis 。MyBatis 是一个基于 Java 的 持久层 框架。 iBATIS 提供的 持久层 框架包括SQL Maps 和 Data Access Objects ( DAO ) MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。 MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (

Spring Mvc中DispatcherServlet和Servlet的区别小结

寵の児 提交于 2020-02-10 02:00:41
在web开发过程中开始接触的是servlet,用来处理用户请求。这几年随着spring 框架越来越成熟,几乎成了java web开发界的主流框架。既然这么受欢迎肯定有它的优点,spring框架在原来的基础上改进了,前端控制器的(DispatcherServlet)跟之前的Servlet作用相似,都是用来接收用户请求。前几天还有小一届的学弟问我这两个东西的区别,觉得还是有必要写篇文章记录下,方便以后的学习。 Servlet介绍 1.Servlet不是框架,它是java库里面的一个类,Servlet是服务器端运行的一个程序。 2.当web容器启动的时候并且执行的时候,Servlet类就会被初始化。 3.用户通过浏览器输入url时,请求到达Servlet来接收并且根据servlet配置去处理。 通常项目中会用到不同的web容器,我这里用到是比较常见的Tomcat。在eclipse里面创建一个java web项目,会有一个WEB-INF的文件夹,为了不轻易被外界访问到,这个文件夹底下的文件都是受保护的。文件夹中包括了一个很重要的配置文件,web.xml,我们要实现的不同Servlet也要在这里配置才能使用。servlet在web.xml中的配置如下图。 servlet配置 这里有个重要的类: httpServlet, 这个类的底层实现也是继承了Servlet这个接口类