Shiro Subject详解

9 篇文章 0 订阅

转自:

Shiro Subject详解

Shiro Subject简介说明

Subject:是Shiro的认证授权组件
   提供当前用户信息(角色 授权),然后进行登录,退出,权限验证等
   我们常将一个Subject对象称之为一个用户

获取Subject

Subject subject = SecurityUtils.getSubject();
使用SecurityUtils.getSubject()可以获得当前的Subject

subject主要接口

Subject login(Subject subject, AuthenticationToken authenticationToken) throws AuthenticationException;    //登陆
void logout(Subject subject);        //退出登陆
Subject createSubject(SubjectContext context);    //获取subject

subject作用

获得Session对象

Session session = subject.getSession();
session.setAttribute( "key", "aValue" );
注意事项:
   1.此处的Session不是HttpSession,而是shiro为我们提供的session
   2.此处的Session不依赖http服务器

获取当前登录的用户名

String currentUser = subject.getPrincipal().toString();
System.out.println("当前登录的用户是:"+currentUser);

验证当前用户的权限

//判断用户是否是拥有某种角色
boolean isRole = subject.hasRole( "admin" );
//是否拥有某种功能
boolean isPer = subject.isPermitted("java265User:run");

退出登录

//退出登录
subject.logout();

注解式授权

@RequiresAuthentication

要求当前Subject已经在session中验证通过(验证当前用户是否登录:subject.isAuthenticated() 结果为true)

@RequiresUser

验证用户是否被记忆

@RequiresGuest

用户没有登录认证或被记住过,验证是否是一个guest的请求,与@RequiresUser完全相反。换言之,RequiresUser == !RequiresGuest。此时subject.getPrincipal() 结果为null.

@RequiresPermissions

验证用户是否具有一个或多个权限,该注解将会经常在项目中使用,如果不满足条件则抛出AuthorizationException异常

@RequiresRoles

验证当前用户是否具有某角色,与验证权限类似


JSP页面标签授权 页面授权标签包含

<shiro:authenticated>        登录之后
<shiro:notAuthenticated>        不在登录状态时
<shiro:guest>            用户在没有RememberMe时
<shiro:user>            用户在RememberMe时
<shiro:hasAnyRoles name="testRole,888" >    在有testRole或888角色时
<shiro:hasRole name="testRole">        拥有角色testRole
<shiro:lacksRole name="testRole">        没有角色testRole
<shiro:hasPermission name="testRole">    拥有权限资源testRole
<shiro:lacksPermission name="testRole">    没有testRole权限资源
<shiro:principal>        显示用户身份名称
<shiro:principal property="username"/>         显示用户身份中的属性值
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值