一、Spring Security 是基于Spring AOP 和 Servlet过滤器的安全框架。它提供全麦你的安全性解决方案, 同时在Web请求级和方法调用级处理身份确认和授权。 Spring Security 核心功能 1)认证(用户/设备/系统) 2)验证(权限控制/授权,允许执行的操作) 3)攻击防护(防止伪造身份) Filter Servlet Spring DI Spring AOP 二、目前常用的安全框架主要是Spring Security 和 Apache Shiro 1、相同点: 1)认证功能 2)授权功能 3)加密功能 4)会话功能 5)缓存支持 6)remeberMe功能 2、优点: 1)Spring Security 基于Spring开发,项目中如果使用Spring作为基础,配合Spring Security 做权限更加方便 。Shiro 需要和Spring进行整合。 2)Spring Security 功能比Shiro更加丰富些,比如安全防护 3)Spring Security 社区资源相对比Shiro 更加丰富 4)如果使用的是Springboot SpringCloud可以无缝隙集成 3、缺点 1)shiro 配置和使用比较简单,Spring Security 上手复杂些。 2)Shiro 依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security依赖Spring容器 三、基于内存的认证信息(内存中配置认证信息,配置多个账号信息) 1、编码思路: 1)重写WebSecurityConfigAdapter类中的config方法 config(AuthenticationManagerBuilder auth) 2) 通过auth对象的inMemoryAuthentication()方法指定认证信息 3)auth.inMemoryAuthentication().withUser("admin").password("123456") 2、指定加密 1)方式一 直接在配置类中指定 2)方式二 通过@Bean注入指定PasswordEncoder 加入之后需要修改Configure的密码加密 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } 四、基于内存角色授权 1、比如管理员和普通用户角色,对于不同的角色,那么允许访问的方法会不一样。 2、如何开启方法级别安全控制 @Configuration注解的类上在添加 @EnableGlobalMethodSecurity注解即可。 3、如何配置方法级别的权限控制 使用@PreAuthorize("hasAnyRole(admin)")即可指定访问级别的角色。 4、通过AuthenticationBuilder的roles()方法,就可以指定角色。 auth.inMemoryAuthentication() .withUser("admin") .password(passwordEncoder().encode("123456")) .roles("beijingAdmin", "shanghaiAdmin"); 五、基于内存数据库的身份认证和角色授权 1、hsqldb内存数据库 2、mysql数据库(本人基于mysql操作的) 六、加密算法 1、Bcrypt: 是一种跨平台的文件加密工具。bcrypt使用的是布鲁斯·施内尔在1993年发布的Blowfish加密算法。由它加密的文件 可在所有支持的操作系统和处理器上进行转移。它的口令必须是(8-56)个字符,并将在内部转化为448位的密钥。