您的位置:首页 > 其它

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

2017-02-08 16:23 435 查看
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398

根据下载的pdf学习。

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

1.Subject的代码结构

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

public interface Subject {
//身份信息获取
Object getPrincipal(); //Primary Principal
PrincipalCollection getPrincipals(); // PrincipalCollection

//身份验证
void login(AuthenticationToken token) throws AuthenticationException;
boolean isAuthenticated();
boolean isRemembered();

//角色授权认证
boolean hasRole(String roleIdentifier);
boolean[] hasRoles(List<String> roleIdentifiers);
boolean hasAllRoles(Collection<String> roleIdentifiers);
void checkRole(String roleIdentifier) throws AuthorizationException;
void checkRoles(Collection<String> roleIdentifiers) throws           AuthorizationException;
void checkRoles(String... roleIdentifiers) throws AuthorizationException;

//权限授权验证
boolean isPermitted(String permission);
boolean isPermitted(Permission permission);
boolean[] isPermitted(String... permissions);
boolean[] isPermitted(List<Permission> permissions);
boolean isPermittedAll(String... permissions);
boolean isPermittedAll(Collection<Permission> permissions);
void checkPermission(String permission) throws AuthorizationException;
void checkPermission(Permission permission) throws AuthorizationException;
void checkPermissions(String... permissions) throws AuthorizationException;
void checkPermissions(Collection<Permission> permissions) throws AuthorizationException;

//会话
Session getSession(); //相当于 getSession(true)
Session getSession(boolean create);

//退出
void logout();

....
//其他略
}


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)退出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: