之前的缓存redis整合有问题,虽然也可以用但是不能跨域不能sso单点登陆,所以决定一步步来先学最基础的shiro再去整合springboot吧.下面开始入门!
Quickstart.java
1.获取正在执行的用户:
Subject currentUser = SecurityUtils.getSubject();
2.设置属于用户的session:
Session session = currentUser.getSession();
session.setAttribute( "someKey", "aValue" );
该会话是一个特定于shio的实例,它提供了常规httpsession所提供的大部分内容,但也提供了一些额外的好处,还有一个很大的区别:它不需要HTTP环境!
如果在web应用程序中部署,默认情况下会话将基于HttpSession。但是,在非web环境中,比如这个简单的快速入门,Shiro默认情况下会自动使用它的企业会话管理。这意味着您可以在任何层的应用程序中使用相同的API,而不管部署环境如何。
3.上面的Subject实例表示当前用户,但是谁是当前用户呢?嗯,他们是匿名的——也就是说,直到他们至少登录一次。让我们这样做:(证明你是谁)
if ( !currentUser.isAuthenticated() ) {
//没有登陆 会把用户数据封装
UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
//记住我功能
token.setRememberMe(true);
//登陆
currentUser.login(token);
}
就是这样!再简单不过了。
但是如果他们的登录尝试失败了呢?你可以捕获各种特定的异常,告诉你到底发生了什么,并允许你处理和相应的反应:
try {
currentUser.login( token );
//login()中传入了用户数据 它会去Realm中验证数据
} catch ( UnknownAccountException uae ) {
//找不到账户
} catch ( IncorrectCredentialsException ice ) {
//密码不匹配
} catch ( LockedAccountException lae ) {
//尝试次数过多
}
... more types exceptions to check if you want ...
} catch ( AuthenticationException ae ) {
//未知其他错误
}
4.现在,我们有了一个登录用户。我们还能做什么?
我们来看看他们是谁:
//print their identifying principal (in this case, a username):
log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." );
我们也可以测试他们是否有特定的角色:
if ( currentUser.hasRole( "schwartz" ) ) {
log.info("May the Schwartz be with you!" );
} else {
log.info( "Hello, mere mortal." );
}
我们还可以看到他们是否有权限对某种类型的实体采取行动:
if ( currentUser.isPermitted( "lightsaber:weild" ) ) {
log.info("You may use a lightsaber ring. Use it wisely.");
} else {
log.info("Sorry, lightsaber rings are for schwartz masters only.");
}
</