您的位置:首页 > 其它

2017.2.7 开涛shiro教程-第六章-Realm及相关对象(四)

2018-01-04 16:37 459 查看
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398

根据下载的pdf学习。

 

第六章 Realm及相关对象(四)

1.Subject的代码结构

Subject是shiro的核心,基本所有身份验证、授权都是通过Subject完成的。





1 public interface Subject {
2     //身份信息获取
3     Object getPrincipal(); //Primary Principal
4     PrincipalCollection getPrincipals(); // PrincipalCollection
5
6     //身份验证
7     void login(AuthenticationToken token) throws AuthenticationException;
8     boolean isAuthenticated();
9     boolean isRemembered();
10
11     //角色授权认证
12     boolean hasRole(String roleIdentifier);
13     boolean[] hasRoles(List<String> roleIdentifiers);
14     boolean hasAllRoles(Collection<String> roleIdentifiers);
15     void checkRole(String roleIdentifier) throws AuthorizationException;
16     void checkRoles(Collection<String> roleIdentifiers) throws           AuthorizationException;
17     void checkRoles(String... roleIdentifiers) throws AuthorizationException;
18
19     //权限授权验证
20     boolean isPermitted(String permission);
21     boolean isPermitted(Permission permission);
22     boolean[] isPermitted(String... permissions);
23     boolean[] isPermitted(List<Permission> permissions);
24     boolean isPermittedAll(String... permissions);
25     boolean isPermittedAll(Collection<Permission> permissions);
26     void checkPermission(String permission) throws AuthorizationException;
27     void checkPermission(Permission permission) throws AuthorizationException;
28     void checkPermissions(String... permissions) throws AuthorizationException;
29     void checkPermissions(Collection<Permission> permissions) throws AuthorizationException;
30
31     //会话
32     Session getSession(); //相当于 getSession(true)
33     Session getSession(boolean create);
34
35     //退出
36     void logout();
37
38     ....
39     //其他略
40 }


View Code
 

还有两个是:RunAs和多线程。代码里省掉了,因为当时我不知道是干嘛的。就打了...



 



 

2.Subject的使用

(1)Subject的创建

一般不用自己创建,直接通过SecurityUtils.getSubject() 获取即可。

public static Subject getSubject() {
Subject subject = ThreadContext.getSubject();// 先判定当前线程是否绑定了Subject
if (subject == null) {
subject = (new Subject.Builder()).buildSubject(); //如果没有绑定就通过Builder绑定,并且返回
ThreadContext.bind(subject);
}
return subject;
}


 

(2)自定义创建Subject

创建完成后,再自己绑定到当前线程即可。

new Subject.Builder().principals(身份).authenticated(true/false).buildSubject();


 

3.Subject的基本使用

(1)身份验证(login)
(2)授权(hasRole*/isPermitted*或 checkRole*/checkPermission*)
(3)将相应的数据存储到会话(Session)
(4)切换身份(RunAs)/多线程身份传播
(5)退出

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: