在网站的登录页面中,记住我选项是一个很常见的功能,勾选记住我后在一段时间内,用户无需进行登录操作就可以访问系统资源。在Spring Security中添加记住我功能很简单,大致过程是:当用户勾选了记住我选项并登录成功后,Spring Security会生成一个token标识,然后将该token标识持久化到数据库,并且生成一个与该token相对应的cookie返回给浏览器。当用户过段时间再次访问系统时,如果该cookie没有过期,Spring Security便会根据cookie包含的信息从数据库中获取相应的token信息,然后帮用户自动完成登录操作。
Spring Security添加图形验证码
添加验证码大致可以分为三个步骤:根据随机数生成验证码图片;将验证码图片显示到登录页面;认证流程中加入验证码校验。Spring Security的认证校验是由UsernamePasswordAuthenticationFilter
过滤器完成的,所以我们的验证码校验逻辑应该在这个过滤器之前。下面一起学习下如何在上一节Spring Security自定义用户认证的基础上加入验证码校验功能。
Spring Security自定义用户认证
在Spring Boot中开启Spring Security一节中我们简单搭建了个Spring Boot + Spring Security的项目,认证的用户名和密码都是由Spring Security生成。Spring Security支持我们自定义认证的过程,如处理用户信息获取逻辑,使用我们自定义的登录页面替换Spring Security默认的登录页及自定义登录成功或失败后的处理逻辑等。这里将在上一节的源码基础上进行改造。
Spring Boot中开启Spring Security
Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shiro相比,它拥有更为强大的功能。Spring Security也可以轻松的自定义扩展以满足各种需求,并且对常见的Web安全攻击提供了防护支持。如果你的Web框架选择的是Spring,那么在安全方面Spring Security会是一个不错的选择。
这里我们使用Spring Boot来集成Spring Security,Spring Boot版本为1.5.14.RELEASE
,Spring Security版本为4.2.7RELEASE
。
Spring Boot中使用过滤器和拦截器
过滤器(Filter)和拦截器(Interceptor)是Web项目中常用的两个功能,本文将简单介绍在Spring Boot中使用过滤器和拦截器来计算Controller中方法的执行时长,并且简单对比两者的区别。
Spring Boot异常处理
Spring Boot对异常的处理有一套默认的机制:当应用中产生异常时,Spring Boot根据发送请求头中的accept
是否包含text/html
来分别返回不同的响应信息。当从浏览器地址栏中访问应用接口时,请求头中的accept
便会包含text/html
信息,产生异常时,Spring Boot通过org.springframework.web.servlet.ModelAndView
对象来装载异常信息,并以HTML的格式返回;而当从客户端访问应用接口产生异常时(客户端访问时,请求头中的accept
不包含text/html
),Spring Boot则以JSON的格式返回异常信息。下面来验证一下。
【Java8实战】新的日期和时间API
Java 8之前的库对日期和时间的支持并不理想,为了解决这个问题,Java 8引入了一套全新的时间日期API,位于java.time
路径下。
LocalDate
LocalDate
类型包含了年月日信息,下面举些LocalDate
的使用示例:
1 | LocalDate date = LocalDate.of(2018, 4, 20); // 2018-04-20 |
【Java8实战】使用Optional取代null
在Java中对一个空对象进行操作时,便会抛出最常见的异常NullPointerException
。为了改善这个问题,Java 8中提供了一个java.util.Optional<T>
类型。Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在则isPresent()
方法会返回true,调用get()
方法会返回该对象。下面介绍Optional类的使用方法。