shiro:认证和授权
Apache Shiro 是Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境。Shiro 可以帮助我们完成:认证【登陆】、授权【权限】、加密【密码】、会话管理、与Web 集成、缓存等。
shiro流程图
subject:理解为用户 securityManager:安全管理(核心组件) Authenticator:认证器 Authorizer:授权器 Realm:这里理解为和数据库交互的一个组件
shiro简单
1.引入相关依赖
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.5.3</version>
</dependency>
2.这里 我们去创建一个ini文件 用来比拟一个数据库
3. 测试
public class Test {
public static void main(String[] args) {
//得到securityManager对象 (安全管理 核心)
DefaultSecurityManager securityManager = new DefaultSecurityManager();
//设置securityManager管理的realm对象
securityManager.setRealm(new IniRealm("classpath:shiro.ini"));
//把securityManager绑定到SecurityUils
SecurityUtils.setSecurityManager(securityManager);
//获取subject对象
Subject subject = SecurityUtils.getSubject();
//封装账户和密码
UsernamePasswordToken token = new UsernamePasswordToken("dl", "001029");
try {
//执行认证功能
subject.login(token);
//密码正确
System.out.println("账号密码正确");
}catch (Exception e){
e.printStackTrace();
//密码错误
System.out.println("账号密码错误");
}
System.out.println("是否认证成功"+subject.isAuthenticated());
System.out.println(subject.isPermitted("user:query")); //认证成功之后 此用户是否有此权限
}
}
正确 结果图
密码错误的
shiro的执行流程图
流程如下:
首先调用 Subject.login(token) 进行登录,其会自动委托给 Security Manager,调用之前必须通过 SecurityUtils.setSecurityManager() 设置;
SecurityManager 负责真正的身份验证逻辑;它会委托给 Authenticator 进行身份验证;
Authenticator 才是真正的身份验证者,Shiro API 中核心的身份认证入口点,此处可以自定义插入自己的实现;
Authenticator 可能会委托给相应的 AuthenticationStrategy 进行多 Realm 身份验证,默认 ModularRealmAuthenticator 会调用 AuthenticationStrategy 进行多 Realm 身份验证;
Authenticator 会把相应的 token 传入 Realm,从 Realm 获取身份验证信息,如果没有返回 / 抛出异常表示身份验证失败了。此处可以配置多个 Realm,将按照相应的顺序及策略进行访问。