1、http.basic(),这就是一个弹出小窗口登录

spring es账号密码bootstrap配置_spring

2、http.formlogin();这是是弹出一个表单登录页面。

spring es账号密码bootstrap配置_登录页面_02

spring es账号密码bootstrap配置_登录页面_03

3、filterSecurityInterception,这是最后一个过虑器,检查以什么方式登录。黄色方块。

蓝色方块ExceptionTranslationFilter捕获最后一个过虑器的异常,如果发性异常,

就会导向2图中定义的登录页(http.basic() 或者http.formlogin()).

spring es账号密码bootstrap配置_登录页面_04

4、用户信息的获取逻辑是被封装在接口:UserDetailService中,我们继承这个接口就要

实现其中的loadUserByUsername()这个方法。这个方法通过用户登录时输入的用户名,

返回一个UserDetails对象,定义一个实现类之后,我们一般要上类上加上@component注解

这样我们这个类就作 为一个bean被注放到spring 容器中。

5、关于security的加密解密,有一个接口,passwordEncode,有两个方法,一个是encode(),

一个是matchs(),分别是加密和匹配,第二个方法是security匹配用户输入的密码和查到的密码

比对。

spring es账号密码bootstrap配置_spring_05

这张图片说明了自定义表单认证主要用到的三个接口,UserDetailsService UserDetails PasswordEncodeer

6、对于自定义的登录页面,我们要在security的配置中放行,一般这么处理。

http.antMatchers(”/loginIndex.html","/要放行的资源“,”/中间用逗号隔开“).permetAll();别忘记斜杠

7、为了便于代码重用,我们对属性进行封装,在一个properties的包里有一个securityProperties的类,注入四个封装类,

分别是:BroswerProperties  ValidateCodeProperties Oauth2Properties SociaProperties,我们用这些类读取类似配置在

application.properties里的文件,例如:com.djbyg.security-cord.properties.loginPage=demo-login.html,用以代替默认的

登录页面。这种方法主要解决用配置代替硬编码。

这种方法的实现主要是用到一个注解:@ConfigurationProperties(prefix="com.djbyg"),这样,写了这个注解的类就可以

读取类中所有以com.djbyg开头的类。

下面这点代码是把securiytProperties.class做为配置注入spring

@Configuration
@EnableConfigurationProperties(SecurityProperties.class)
public class SecurityCoreConfig {

}

spring es账号密码bootstrap配置_spring_06

8、如果不确定返回的是一个对象还是一个字符串,或者是一个数字,我们可以这样作,定义一个只有一个属性的类:

public class SimpleResponse{

private Object content;

public SimpleResponse(Object content){

           this.content=content;

           }

...get()...set()...;}

}

这样,我们对返回类型可能是多咱类型的话就象下面这样:

return new SimpleResponse("这里可以是任何对象,包话字符串“)

9、有三个小点,对于登录成功后的处理,我们可以实现AutheticationSuccessHandler接口和

AutheticationFailureHandler接口。其中ObjectMapper是一个把对象转成JSON的类,springmvc在初

始化的时候已经为我们注入,只需加载就行,

spring es账号密码bootstrap配置_登录页面_07

9、下面说一说认证流程,security带着用户名密码进入验证过程

spring es账号密码bootstrap配置_字符串_08

10、请求进去时第一个过虑器,请求返回时最后一个过虑器,就是这个securityContextPersistenceFilter,

进去是检查session中有没有securityContextHolder,

spring es账号密码bootstrap配置_字符串_09

11、这是一个图片验证码的类,特别注意,expireTime=LocalTime.now().plusSeconds(expireIn)

spring es账号密码bootstrap配置_spring_10

下面这个类,将图片写到前端

spring es账号密码bootstrap配置_spring_11

图片验证码的类:

spring es账号密码bootstrap配置_spring_12

下面这个是重构过的,生成验证码的位数、宽、高和过期时间,都可以从配置中获得

spring es账号密码bootstrap配置_登录页面_13

12、rememberMe功能开发

  

spring es账号密码bootstrap配置_spring_14

下面是对数据库的操作,tokenRepository.setCreateTableOnStartup(true)表示要创建一张表,第一次启动会创建表,

再次启动请注释掉,要不会报表已存在的错。

spring es账号密码bootstrap配置_spring_15

注意其中rememberMe的配置部分,上下十行代码,加上前端的remember_me的选项,记住我功能就完成了。

spring es账号密码bootstrap配置_字符串_16

13、短信验证码的发送

spring es账号密码bootstrap配置_字符串_17

spring es账号密码bootstrap配置_登录页面_18