1、http.basic(),这就是一个弹出小窗口登录
2、http.formlogin();这是是弹出一个表单登录页面。
3、filterSecurityInterception,这是最后一个过虑器,检查以什么方式登录。黄色方块。
蓝色方块ExceptionTranslationFilter捕获最后一个过虑器的异常,如果发性异常,
就会导向2图中定义的登录页(http.basic() 或者http.formlogin()).
4、用户信息的获取逻辑是被封装在接口:UserDetailService中,我们继承这个接口就要
实现其中的loadUserByUsername()这个方法。这个方法通过用户登录时输入的用户名,
返回一个UserDetails对象,定义一个实现类之后,我们一般要上类上加上@component注解
这样我们这个类就作 为一个bean被注放到spring 容器中。
5、关于security的加密解密,有一个接口,passwordEncode,有两个方法,一个是encode(),
一个是matchs(),分别是加密和匹配,第二个方法是security匹配用户输入的密码和查到的密码
比对。
这张图片说明了自定义表单认证主要用到的三个接口,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 {
}
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在初
始化的时候已经为我们注入,只需加载就行,
9、下面说一说认证流程,security带着用户名密码进入验证过程
10、请求进去时第一个过虑器,请求返回时最后一个过虑器,就是这个securityContextPersistenceFilter,
进去是检查session中有没有securityContextHolder,
11、这是一个图片验证码的类,特别注意,expireTime=LocalTime.now().plusSeconds(expireIn)
下面这个类,将图片写到前端
图片验证码的类:
下面这个是重构过的,生成验证码的位数、宽、高和过期时间,都可以从配置中获得
12、rememberMe功能开发
下面是对数据库的操作,tokenRepository.setCreateTableOnStartup(true)表示要创建一张表,第一次启动会创建表,
再次启动请注释掉,要不会报表已存在的错。
注意其中rememberMe的配置部分,上下十行代码,加上前端的remember_me的选项,记住我功能就完成了。
13、短信验证码的发送