2019年10月6日
摘要: 在项目的维护过程中,我们通常会在应用中加入短信或者邮件预警功能,比如当应用出现异常宕机时应该及时地将预警信息发送给运维或者开发人员,本文将介绍如何在Spring Boot中发送邮件。在Spring Boot中发送邮件使用的是Spring提供的org.springframework.mail.java 阅读全文
posted @ 2019-10-06 12:25 houJINye 阅读(159) 评论(0) 推荐(0)
摘要: 在 Docker 镜像与容器 一节中我们通过Dockerfile构建了镜像,这节我们来了解下Dockerfile的语法。Dockerfile包含了诸多关键字,所以要学习Dockerfile的用法,得先从这些关键字入手。 FROM 位于Dockerfile开头,表示基于什么镜像构建: 出于安全考虑,最 阅读全文
posted @ 2019-10-06 12:24 houJINye 阅读(76) 评论(0) 推荐(0)
摘要: SSO(Single Sign On)即单点登录,效果是多个系统间,只要登录了其中一个系统,别的系统不用登录操作也能访问。比如在浏览器上同时打开天猫和淘宝页面,在天猫页面进行登录,然后回到淘宝页面刷新后会发现淘宝也已经是登录状态了。这节将介绍如何使用Spring Security OAuth2实现单 阅读全文
posted @ 2019-10-06 12:13 houJINye 阅读(393) 评论(0) 推荐(0)
摘要: OAuth是一种用来规范令牌(Token)发放的授权机制,主要包含了四种授权模式:授权码模式、简化模式、密码模式和客户端模式。Spring Security OAuth2对这四种授权模式进行了实现。这节主要记录下什么是OAuth2以及Spring Security OAuth2的基本使用。 四种授权 阅读全文
posted @ 2019-10-06 12:13 houJINye 阅读(1632) 评论(0) 推荐(0)
摘要: 在上一节Spring Security OAuth2入门中,我们使用了Spring Security OAuth2封装的授权码和密码模式成功获取了令牌,这节记录下如何通过自定义的用户名密码和手机短信验证码的方式来获取令牌。 自定义用户名密码方式获取令牌 在上一节的基础上,我们先在资源服务器上加入一些 阅读全文
posted @ 2019-10-06 11:51 houJINye 阅读(14845) 评论(0) 推荐(0)
摘要: 在前面几节中,我们获取到的令牌都是基于Spring Security OAuth2默认配置生成的,Spring Security允许我们自定义令牌配置,比如不同的client_id对应不同的令牌,令牌的有效时间,令牌的存储策略等;我们也可以使用JWT来替换默认的令牌。 自定义令牌配置 我们让认证服务 阅读全文
posted @ 2019-10-06 11:49 houJINye 阅读(2385) 评论(0) 推荐(0)
摘要: 在《Spring-Boot-shiro用户认证》中,我们通过继承AuthorizingRealm抽象类实现了doGetAuthenticationInfo()方法完成了用户认证操作。接下来继续实现doGetAuthorizationInfo()方法完成Shiro的权限控制功能。 授权也称为访问控制, 阅读全文
posted @ 2019-10-06 11:44 houJINye 阅读(265) 评论(0) 推荐(0)
摘要: 在Shiro中我们可以通过org.apache.shiro.session.mgt.eis.SessionDAO对象的getActiveSessions()方法方便的获取到当前所有有效的Session对象。通过这些Session对象,我们可以实现一些比较有趣的功能,比如查看当前系统的在线人数,查看这 阅读全文
posted @ 2019-10-06 11:44 houJINye 阅读(431) 评论(0) 推荐(0)
摘要: 在Spring Boot中集成Shiro进行用户的认证过程主要可以归纳为以下三点: 1、定义一个ShiroConfig,然后配置SecurityManager Bean,SecurityManager为Shiro的安全管理器,管理着所有Subject; 2、在ShiroConfig中配置ShiroF 阅读全文
posted @ 2019-10-06 11:43 houJINye 阅读(157) 评论(0) 推荐(0)
摘要: 接着《Spring-Boot-shiro用户认证》,当用户成功登录后,关闭浏览器然后再打开浏览器访问http://localhost:8080/web/index,页面会跳转到登录页,之前的登录因为浏览器的关闭已经失效。 Shiro为我们提供了Remember Me的功能,用户的登录状态不会因为浏览 阅读全文
posted @ 2019-10-06 11:41 houJINye 阅读(222) 评论(0) 推荐(0)
摘要: HTML 5中新增的跨域资源访问(Cross-Origin Resource Sharing)特性可以让我们在开发后端系统的时候决定资源是否允许被跨域访问。所谓跨域指的是域名不同或者端口不同或者协议不同,比如当从mrbrid.cc网站访问mrbird.cc:8080网站资源就会存在跨域问题。Spri 阅读全文
posted @ 2019-10-06 11:39 houJINye 阅读(240) 评论(0) 推荐(0)
摘要: 通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行。而异步编程则没有这个限制,代码的调用不再是阻塞的。所以在一些情景下,通过异步编程可以提高效率,提升接口的吞吐量。这节将介绍如何在Spring Boot中进行异步编程。 开 阅读全文
posted @ 2019-10-06 11:38 houJINye 阅读(919) 评论(1) 推荐(0)
摘要: 个人觉得JdbcTemplate相较于MyBaits,Hibernate等数据库框架更容易上手,对SQL的操作也更为直观方便,所以在项目中也是一个不错的选择。在Spring Boot开启JdbcTemplate很简单,只需要引入spring-boot-starter-jdbc依赖即可。JdbcTem 阅读全文
posted @ 2019-10-06 11:37 houJINye 阅读(635) 评论(0) 推荐(0)
摘要: 整合MyBatis之前,先搭建一个基本的Spring Boot项目开启Spring Boot。然后引入mybatis-spring-boot-starter和数据库连接驱动(这里使用关系型数据库Oracle 11g)。 mybatis-spring-boot-starter 在pom中引入: 不同版 阅读全文
posted @ 2019-10-06 11:36 houJINye 阅读(482) 评论(0) 推荐(0)
摘要: Spring Boot支持FreeMarker、Groovy、Thymeleaf和Mustache四种模板解析引擎,官方推荐使用Thymeleaf。 spring-boot-starter-thymeleaf 在Spring Boot中使用Thymeleaf只需在pom中加入Thymeleaf的st 阅读全文
posted @ 2019-10-06 11:35 houJINye 阅读(1165) 评论(0) 推荐(0)
摘要: 过滤器(Filter)和拦截器(Interceptor)是Web项目中常用的两个功能,本文将简单介绍在Spring Boot中使用过滤器和拦截器来计算Controller中方法的执行时长,并且简单对比两者的区别。 现有如下Controller: 下面通过配置过滤器和拦截器来实现对get方法执行时间计 阅读全文
posted @ 2019-10-06 11:34 houJINye 阅读(280) 评论(0) 推荐(0)
摘要: 在程序中可以使用缓存的技术来节省对数据库的开销。Spring Boot对缓存提供了很好的支持,我们几乎不用做过多的配置即可使用各种缓存实现。这里主要介绍平日里个人接触较多的Ehcache和Redis缓存实现。 准备工作 可根据Spring-Boot中使用Mybatis.html搭建一个Spring 阅读全文
posted @ 2019-10-06 11:33 houJINye 阅读(2268) 评论(1) 推荐(0)
摘要: Spring Boot中开启Spring Security Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shiro相比,它拥有更为强大的功能。Spring Security也可以轻松的自定义扩展以满足各种需求, 阅读全文
posted @ 2019-10-06 11:28 houJINye 阅读(1340) 评论(0) 推荐(0)
摘要: Spring Boot中的JSON技术 平日里在项目中处理JSON一般用的都是阿里巴巴的Fastjson,后来发现使用Spring Boot内置的Jackson来完成JSON的序列化和反序列化操作也挺方便。Jackson不但可以完成简单的序列化和反序列化操作,也能实现复杂的个性化的序列化和反序列化操 阅读全文
posted @ 2019-10-06 11:26 houJINye 阅读(617) 评论(0) 推荐(0)
摘要: 编写单元测试可以帮助开发人员编写高质量的代码,提升代码质量,减少Bug,便于重构。Spring Boot提供了一些实用程序和注解,用来帮助我们测试应用程序,在Spring Boot中开启单元测试只需引入spring-boot-starter-test即可,其包含了一些主流的测试库。本文主要介绍基于 阅读全文
posted @ 2019-10-06 11:25 houJINye 阅读(1264) 评论(0) 推荐(0)
摘要: Spring Boot对异常的处理有一套默认的机制:当应用中产生异常时,Spring Boot根据发送请求头中的accept是否包含text/html来分别返回不同的响应信息。当从浏览器地址栏中访问应用接口时,请求头中的accept便会包含text/html信息,产生异常时,Spring Boot通 阅读全文
posted @ 2019-10-06 11:23 houJINye 阅读(423) 评论(0) 推荐(0)
摘要: Swagger是一款可以快速生成符合RESTful风格API并进行在线调试的插件。本文将介绍如何在Spring Boot中整合Swagger。 在此之前,我们先聊聊什么是REST。REST实际上为Representational State Transfer的缩写,翻译为“表现层状态转化” 。如果一 阅读全文
posted @ 2019-10-06 10:27 houJINye 阅读(148) 评论(0) 推荐(0)
摘要: Spring Boot中结合Hibernate Validator可以实现优雅的参数校验,而不必在业务代码中写一大堆的参数校验逻辑。Hibernate Validator的基本使用可以参考Spring表单校验,这里介绍一种结合全局异常捕获的方式来实现低耦合简洁的参数校验解决方案。 方法参数校验 新建 阅读全文
posted @ 2019-10-06 10:25 houJINye 阅读(373) 评论(0) 推荐(0)
摘要: 在pom.xml文件中,将打包方式改为war: 然后添加如下的Tomcat依赖配置,覆盖Spring Boot自带的Tomcat依赖: 在<build></build>标签内配置项目名(该配置类似于server.context-path=mrbird): 添加启动类ServletInitialize 阅读全文
posted @ 2019-10-06 10:25 houJINye 阅读(706) 评论(0) 推荐(0)
摘要: 平日里开发项目中,修改了Java代码或者配置文件的时候,必须手动重启项目才能生效。所谓的热部署就是在你修改了后端代码后不需要手动重启,工具会帮你快速的自动重启是修改生效。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassL 阅读全文
posted @ 2019-10-06 10:16 houJINye 阅读(194) 评论(0) 推荐(0)
摘要: 在Spring框架中,使用AOP配合自定义注解可以方便的实现用户操作的监控。首先搭建一个基本的Spring Boot Web环境开启Spring Boot,然后引入必要依赖: 自定义注解 定义一个方法级别的@Log注解,用于标注需要监控的方法: 创建库表和实体 在数据库中创建一张sys_log表,用 阅读全文
posted @ 2019-10-06 10:14 houJINye 阅读(1298) 评论(0) 推荐(0)
摘要: Quartz是一款开源的任务调度框架,对任务调度过程进行了高度的抽象,包含调度器(Scheduler),任务(Job)和触发器(Trigger)。Quartz在org.quartz.*中通过接口和类对这三个概念进行了描述(这里使用的Quartz版本为1.8.6): Job:一个简单的接口,只包含一个 阅读全文
posted @ 2019-10-06 10:11 houJINye 阅读(195) 评论(0) 推荐(0)
摘要: Apache Shiro(发音为shee-roh,日语堡垒(Castle)的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。相较于Spring Security来说较为简单,易于上手。 Apach 阅读全文
posted @ 2019-10-06 10:09 houJINye 阅读(462) 评论(0) 推荐(0)
摘要: Docker容器在运行的时候会产生数据,为了不让这些数据随着容器的删除而删除,Docker支持数据持久化。Docker数据持久化主要有两种方式:volume和bind mount。使用volume数据将持久化在Docker管理的volume中(保存在/var/lib/docker/volumes目录 阅读全文
posted @ 2019-10-06 09:51 houJINye 阅读(170) 评论(0) 推荐(0)
摘要: 在安装好Docker后,其默认提供了三种网络模式:bridge、host和none。其中bridge是Docker默认的网络模式,在该模式下,容器拥有自己的IP namespace,容器可以通过宿主机上的docker0网桥与别的容器、宿主机或者外部网络进行通信。此外我们还可以通过端口映射的方式让外部 阅读全文
posted @ 2019-10-06 09:48 houJINye 阅读(302) 评论(0) 推荐(1)
摘要: 部署一个应用可能需要用到多个Docker容器,比如MySQL,Redis,Nginx等,单独的去管理每个容器可能会比较麻烦。Docker Compose可以通过一个yml文件来统一管理这些容器,可以极大简化我们的应用部署过程。这里以部署WordPress为例,介绍如何使用Docker Compose 阅读全文
posted @ 2019-10-06 09:42 houJINye 阅读(139) 评论(0) 推荐(0)
摘要: Merge语句是Oracle 9i新增的语法,用来合并Update和Insert语句。通过Merge语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行Update,无法匹配的执行Insert。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于Insert+Updat 阅读全文
posted @ 2019-10-06 09:37 houJINye 阅读(389) 评论(0) 推荐(0)
摘要: PL/SQL(Procedural Language/SQL)是一种过程化语言,在PL/SQL 中可以通过IF 语句或LOOP 语句实现控制程序的执行流程,甚至可以定义变量,以便在语句之间传递数据信息,这样PL/SQL 语言就能够实现操控程序处理的细节过程。 PL/SQL 程序都是以块(BLOCK) 阅读全文
posted @ 2019-10-06 09:35 houJINye 阅读(435) 评论(0) 推荐(0)
摘要: SQLPlus是一个被DBA和开发人员广泛使用的功能强大的Oracle工具,可以在各个平台上拥有操作的一致性。SQLPlus可以执行输入的SQL语句和SQL文件,通过SQLPlus可以和数据库进行对话。以下例子基于Oracle 11g。 set命令设置运行环境 在Oracle 11g中,可以使用se 阅读全文
posted @ 2019-10-06 09:32 houJINye 阅读(1445) 评论(0) 推荐(0)
摘要: 通常,“Oracle数据库”既指存储在硬盘上的内部存有数据的数据文件,也指用来管理这些数据文件的内存结构。实际上,“数据库”归属于数据文件,“实例”则归属于内存结构。 图1-1展示了oracle实例与数据库的关系。 一个实例由系统全局内存区域(System Global Area,SGA)以及一系列 阅读全文
posted @ 2019-10-06 09:28 houJINye 阅读(708) 评论(0) 推荐(0)