7.shiro官网入门案例ini

之前的缓存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.");
}
</
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. Exception in thread "main" org.apache.shiro.config.ConfigurationException: Unable to instantiate class [org.apache.shiro.web.mgt.DefaultWebSecurityManager] for object named 'securityManager'. Please ensure you've specified the fully qualified class name correctly. at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:309) at org.apache.shiro.config.ReflectionBuilder$InstantiationStatement.doExecute(ReflectionBuilder.java:927) at org.apache.shiro.config.ReflectionBuilder$Statement.execute(ReflectionBuilder.java:887) at org.apache.shiro.config.ReflectionBuilder$BeanConfigurationProcessor.execute(ReflectionBuilder.java:765) at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:260) at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:167) at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:130) at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:108) at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:94) at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46) at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123) at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47) at com.xiu.Quickstart.main(Quickstart.java:26) Caused by: org.apache.shiro.util.UnknownClassException: Unable to load class named [org.apache.shiro.web.mgt.DefaultWebSecurityManager] from the thread context, current, or system/application ClassLoaders. All heuristics have been exhausted. Class could not be found. at org.apache.shiro.util.ClassUtils.forName(ClassUtils.java:152) at org.apache.shiro.util.ClassUtils.newInstance(ClassUtils.java:168) at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:302) ... 12 more
最新发布
06-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值