首先加入Maven依赖
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
然后是代码:
public class ShiroHelloWorld {
/**
* shiro认证的步骤
*
* 1. 构建创建SecurityManager
* 2. 主体提交认证
* 3. SecurityManager认证
* 4. Authenticator认证
* 5. Realm验证
* @param args
*/
//先使用简单的Realm来验证
private SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
@Before
public void addUser(){
simpleAccountRealm.addAccount("mark","123456"); //Realm可以添加多个账户
//现在只是入门,使用的是简单的Realm,之后会有更符合业务逻辑的Realm出现
simpleAccountRealm.addAccount("wangye","123456");
}
@Test
public void testAutheticateion(){
//1. 构建SecurityManager环境
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(simpleAccountRealm); //因为最终式使用Realm来验证,所以要设置Realm
//2. 主体提交认证
SecurityUtils.setSecurityManager(defaultSecurityManager);//先设置认证环境
Subject subject = SecurityUtils.getSubject();
//家下来就是登陆了,如果传入的用户名不正确,和Realm中的不匹配,那么久会异常
UsernamePasswordToken token = new UsernamePasswordToken("wangye","123456");
subject.login(token);
System.out.println("是否登陆成功:"+ subject.isAuthenticated());//true
//登陆就有登出
subject.logout();
System.out.println("是否验证成功:"+ subject.isAuthenticated());//false
}
}
需要搞清的是,shiro是如下完成步骤的。subject.login(token);这样使用用户信息验证登录验证的时候,我们的subject会把验证的的任务移交给securityManager.login(token)完成 ,而securityManager又会把任务交给authenticate
然后,authenticate就会从Realm去数据进行比对,然后返回有还是没有。