安全管理之SpringSecurity
安全对于任何项目来说都是非常重要的,一般而言任何项目都会有较为严格的认证和授权操作,在Java开发领域常见的安全框架有Shiro和Spring Security。Shiro是一个轻量级的安全管理框架,提供了认证、授权、会话管理、密码管理、缓存管理等功能,而Spring Security则是一个更为复杂的安全管理框架,功能比Shiro更强大,权限控制细粒度更高,对于OAuth2的支持也更友好,再加上Spring Security源自Spring全家桶,因此与Spring框架可以做到无缝整合,尤其是SpringBoot中提供的自动化配置方案,可以让Spring Security使用变得更加便捷。本篇学习Spring Security在SpringBoot框架中的使用。
Spring Security基本配置SpringBoot针对Spring Security提供了自动化的配置方案,因为SpringBoot整合Spring Security非常简单,这也是SpringBoot项目中使用Spring Security的优势所在。接下来介绍SpringBoot中如何整合Spring Secur ...
缓存
Spring自3.1开始就提供了对缓存的支持,核心思路是对方法的缓存,当开发者调用一个方法时,将方法的参数和返回值作为key/value缓存起来,当再次调用该方法时,如果缓存中有数据,就直接从缓存中获取,否则直接调用该方法,这种缓存方式是最有效,因为大部分情况下开发者都是在调用方法。不过Spring中并没有提供缓存的具体实现,而是提供了一套缓存的API,这样开发者就可以根据自己需要来选择合适的缓存并实现它即可。目前SpringBoot支持如下8种缓存:Simple、Caffeine、JCache(JSR-107)、Redis、Couchbase、Infinispan、Ehcache 2.x和Hazelcast。目前常用的缓存只是其中的两个:Ehcache 2.x和Redis。其实在Spring中,无论开发者使用哪种缓存实现,不同的只是缓存配置,而开发者使用的缓存注解都是一致,因此Spring中的缓存注解和各种缓存实现之间的关系非常类似于JDBC和各种数据库驱动这两者直接的关系一般。
Ehcache 2.x缓存Ehcache缓存在Java开发领域算的上是比较出名的缓存,而在SpringB ...
开发者工具与单元测试
本篇来学习开发者工具和单元测试相关的知识,对于一个开发者来说了解开发工具和单元测试对于自身水平提高有着非常大的帮助。SpringBoot中提供了一组开发者工具spring-boot-devtools,用于提升开发效率,开发人员可以将该模块包含在任何项目中,而spring-boot-devtools最令人喜欢的地方就是支持热部署,当开发者修改了部分代码或者资源后,SpringBoot项目会自动更新。
devtools使用devtools基本使用当开发者想要在项目中加入devtools模块,只需添加相关依赖即可:
123456<!--引入devtools依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> ...
构建RESTful服务
本篇来学习RESTful相关知识,相信通过本篇的学习,开发者就能在短时间内开发出一套属于自己的RESTful风格的应用。
REST简介 REST(Representational State Transfer )是一种Web软件架构风格,它是一种风格,而不是标准,匹配或兼容这种架构风格的网络服务称为REST服务。REST服务简洁并且有层次,REST通常基于HTTP、URI和XML以及HTML这些现有的广泛流行的协议和标准。在REST中,资源是由URI 来指定的,对资源的增删改查操作可以通过HTTP协议提供的GET、POST、PUT、DELETE等方法实现。使用REST可以更高效地利用缓存来提高响应速度, 同时REST中的通信会话状态由客户端来维护,这可以让不同的服务器处理一系列请求中的不同请求,进而提高服务器的扩展性。在前后端分离项目中,一个设计良好的Web软件架构必然要满足RESTful风格。 在Spring MVC框架中,开发者可以通过@RestController注解开发一个REST服务,不过,Spring Boot对此提供了自动化配置方案,开发者只需要添加相关依赖就能快速构 ...
整合NoSQL---MongoDB及Session共享
本篇继续学习如何整合非关系型数据库(NoSQL),主要是MongoDB的整合,顺便学习如何进行Session的共享。
MongoDB简介MongoDB是一种面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库之间的产品,MongoDB功能丰富,它支持一种类似JSON的BSON数据格式,既可以存储简单的数据格式,也可以存储复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,且支持对数据建立索引。总的来说,MongoDB是一款应用相当广泛的NoSQL数据库。
MongoDB安装目前MongoDB最新版为4.4.1,但是为避免一些问题,此处依然使用4.0.0版本,安装环境选择CentOS7,安装的步骤如下:第一步,下载MongoDB。进入到home目录下执行如下命令下载MongoDB:
1wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
下载完成后,将下载的MongoDB解压,并将解压后的文件夹重命名为mongodb,可执行如下命令:
12tar -zxvf mongodb- ...
整合NoSQL---Redis
在前面学习了SpringBoot如何整合关系型数据库,接下来开始学习如何整合非关系型数据库(NoSQL),本篇主要介绍Redis的整合,具体包括Redis介绍、Redis集群搭建,SpringBoot整合单机版Redis和SpringBoot整合Redis集群等。
非关系型数据库非关系型数据库(NoSQL)和关系型数据库两者存在许多的显著不同点,其中最重要的是NoSQL不使用SQL作为查询语言。其数据存储可以不需要固定的表格模式,一般都有水平可扩展的特征。NoSQL主要有如下几种不同的分类:
Key/Value键值存储。这种数据存储通常都是无数据结构的,一般被当作字符串或者二进制数据,但是数据加载速度快,典型的使用场景就是处理高并发或者用于日志系统等,这一类的数据库有Redis、Tokyo Cabinet等。
列存储数据库。列存储数据库功能相对局限,但是查找速度快,容易进行分布式扩展,一般用于分布式文件系统中,这一类的数据库有HBase、Cassandra等。
文档型数据库。和Key/Value键值存储类似,文档型数据库也没有严格的数据格式,这既是缺点也是优点,因为不需要预先创建表结 ...
配置多数据源
接下来学习SpringBoot如何配置多数据源。所谓多数据源就是一个Java EE项目中采用了不同数据库实例中的多个库,或者是同一个数据库实例中的多个不同库。一般来说,采用MyCat等分布式数据库中间件是比较好的解决方案,这样可以把数据库读写分离、分库分表、备份等操作交给中间件去做,这样Java代码只需要专注于业务即可。不过这并不意味着无法使用Java代码解决类似的问题,在Spring Famework中就可以配置多个数据源,SpringBoot作为其中的佼佼者,自然也同样支持多数据源的配置,只是配置方式有些变化而已。
下面就分别介绍使用Jdbc Template、Mybatis和SpringData JPA等不同持久层框架时的多数据源配置。
Jdbc Template多数据源Jdbc Template多数据源配置是最简单的一个,因为一个Jdbc Template就对应一个DataSource,开发者只需要提供多个DataSource,再手动配置Jdbc Template即可。具体配置如下:第一步,创建数据库。使用下面的SQL语句来手动创建两个数据库和表:
12345678910111 ...
持久层技术整合
持久层是Java EE访问数据库的核心操作,SpringBoot中对常见的持久层框架都提供了自动化配置,如Spring内置的jdbc Template、JPA等,而Mybatis的自动化配置则是由Mybatis官方提供的。本篇就来学习SpringBoot如何整合这几种持久层技术,既然是整合那么对于这些持久层的用法就不会有较复杂的介绍。个人建议研究Mybatis和JPA就足矣,jdbc Template可以忽略。
整合jdbc TemplateJdbc Template是Spring内置的一套JDBC模板框架,使用AOP技术来解决直接使用JDBC时需要大量重复代码的问题。Jdbc Template虽然没有Mybatis那么灵活,但是比直接使用JDBC要方便很多。SpringBoot中对Jdbc Template的使用提供了自动化配置类JdbcTemplateAutoConfiguration,查看一下它的部分源码:
1234567891011121314151617181920212223242526272829303132@Configuration@ConditionalOnClas ...
SpringBoot Web开发整合(下)
本篇是Web开发整合的下篇内容,具体包括、启动系统任务、整合Servlet、Filter和Listener路径映射、配置AOP、自定义欢迎页、自定义favicon和除去某个自动配置等相关知识。
启动系统任务众所周知,有一些特殊的任务需要在系统启动时执行,如配置文件加载、数据库初始化等操作。如果没有使用SpringBoot,这些问题可以在Listener中得到解决。SpringBoot对此提供了两种方式:CommandLineRunner和ApplicationRunner。这两种基本上差不多,只是使用时的参数不同而已。
CommandLineRunnerSpringBoot项目在启动时会遍历所有CommandLineRunner的实现类,并调用其中的run方法,如果整个系统中存在多个CommandLineRunner的实现类,那么可以使用@Order注解来对这些实现类的调用顺序进行排序。
查看CommandLineRunner源码可知为一个函数式接口,其中只包含一个run方法:
1234@FunctionalInterfacepublic interface CommandLineRu ...
SpringBoot Web开发整合(中)
本篇是Web开发整合的中篇内容,具体包括:自定义错误页、CORS支持、配置类与XML配置和注册拦截器等相关知识。
自定义错误页在上篇中介绍了使用@ControllerAdvice配和@ExceptionHandler注解来处理全局异常。在处理异常时,开发者可以根据实际情况返回不同的页面,但是这种异常处理方式一般用来处理应用级别的异常,有一些容器级别的错误就处理不了,如Filter中抛出异常,使用@ControllerAdvice定义的全局异常处理机制就无法处理,很高兴SpringBoot开发团队意思到了这一点,提供了其他的异常处理方式。
通过前面的学习在访问请求过程中,多多少少也碰到过404和500等页面,它们就是根据用户在发起请求时发生的错误类型来返回不同的页面:
使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为errorspringboot,然后添加spring-boot-starter-web依赖。
实际上,SpringBoot在返回错误信息的时候不一定返回HTML页面,就像前面设置的当你返回String对象就是JSON对象,返回 ...
