什么是Spring Security
Spring Security 是基于Spring AOP和Servlet过滤器的安全框架,它提供全面的安全解决方案,同时在Web请求级别和方法调用级别处理身份确认和授权
Spring Security 核心功能
1、认证(你是谁,用户/设备/系统)
2、验证(你能干什么,也叫权限控制/授权,允许执行的操作)
3、攻击防护(防止伪造身份)
Spring Security原理技术
Filter、Servlet、Spring DI、Spring AOP
常用的安全框架
目前常用的安全框架主要是Spring Security 和Apache Shiro
相同点
1、认证功能
2、授权功能
3、会话功能
4、加密功能
5、缓存支持
6、remeberMe功能
不同点
优点
1、Spring Security基于Spring开发,项目中如果使用Spring 作为基础,配合Spring Security做权限更加方便。而Shiro需要和Spring进行整合
2、Spring Securiy功能闭Shiro更加丰富,例安全防护方面
3、Spring Security 社区资源相比Shiro更加丰富
4、如何使用SpringBoot、SpringCloud的话,三者无缝对接
缺点
1、Shiro的配置和使用比较简单,Spring Security 上手更复杂写
2、Shiro依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security依赖Spring 容器
编码思路
我们要在内存中初始化我们的认证信息的话,那么需要重写WebSecurityConfigurationAdapter类中的configure方法:
configue(AuthenticationManagerBuilder auth)然后通过auth对象的inMemoryAuthentication()方法指定认证信息:
auth.inMemoryAuthentication().withUser(“admin”).password(“123456”)
密码加密
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
/**
* 基于内存的方式,构建两个用户账号:admin/admin,user/user
*/
auth.inMemoryAuthentication().
passwordEncoder(new BCryptPasswordEncoder()).
withUser("admin").
password(new BCryptPasswordEncoder().encode("admin")).
roles();
auth.inMemoryAuthentication().
passwordEncoder(new BCryptPasswordEncoder()).
withUser("user").
password(new BCryptPasswordEncoder().encode("user")).
roles();
}
如何给指定的用户指定角色
如何开启方法级别的安全控制
如何配置方法级别的权限控制
使用注解@PreAuthorize("hasAnyRole(‘admin’))即可指定访问级别的角色
持续更新