SpringSecurity
1.环境配置
过滤器、拦截器…
不是功能性需求
安全在什么时候考虑?设计之初;
- 漏洞,隐私泄露;
- 架构确定之后
SpringSecurity、shiro:框架,简化配置;(简化过滤器、拦截器…)
认证、授权
- 功能权限
- 访问权限
- 菜单权限
环境配置
Spring2.0.xx(新版本可能会出问题)
SpringSecurity依赖
2.用户认证和授权
导入SpringSecurity依赖
配置授权
看官网;看源码:父类源码;注解源码;
不同版本有不同的功能;
创建一个config包,SpringSecurity相关配置编写在该包的SecurityConfig类中;注解@EnableWebsecurity
这个类继承WebSecurityConfigAdater父类,自定义安全策略;
config方法:有三个不同的重写;
链式编程;
需求:首页所有人可以访问,功能页只有对应的人可以访问。
没有权限,调到登录页:开启登录页
设置登录页的url
配置认证
认证获取用户信息的方法:
- 从内存中;
需要为密码设置加密方式
- 从数据库中
3.注销及权限控制
注销
动态显示菜单
themleaf实现
4.记住我及首页定制
开启记住我功能
本质上是一个cookie,默认保存两周;
Shiro
1.Shiro快速开始
查看官方网站:10 Minute Tutorial
1.导入shiro依赖
不想找父依赖/找依赖的版本号:到Maven仓库找依赖 https://mvnrepository.com/
2.导shiro配置文件
3.导入quickstart:HelloWorld
需要注意的地方
-
关于日志
官方只导入了一个日志门面:slf4j;官方默认使用common-logging,但是有时候会报错
-
关于Quickstart类
官方的Quickstart类中创建SecurityManager的方法已经失效
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager = factory.getInstance();
调用下面的方法创建DefaultSecurityManager
DefaultSecurityManager defaultSecurityManager=new DefaultSecurityManager(); IniRealm iniRealm=new IniRealm("classpath:shiro.ini"); defaultSecurityManager.setRealm(iniRealm);
2.Shiro的Subject分析
使用简单的ini配置是创建Shiro的SecurityManager最简单的方式。我们通过工厂模式加载一个.ini文件并返回一个SecurityManager实例
DefaultSecurityManager defaultSecurityManager=new DefaultSecurityManager();
IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
defaultSecurityManager.setRealm(iniRealm);
SecurityManager作为JVM单例模式进行访问(其实是一个全局的对象)。大部分应用不会这么作,一般依赖配置文件或者web.xml文件。
SecurityUtils.setSecurityManager(defaultSecurityManager);
获取当前的Subject(也就是当前的用户 user)
Subject currentUser = SecurityUtils.