您的位置:首页 > 其它

shiro 权限认证的原理,个人的理解

2015-05-22 09:49 459 查看
1.对有没有访问权限的理解。 我们这里要对系统中的 角色组、角色、用户、功能 之间的关系要理清楚,http://blog.csdn.net/baicp3/article/details/45028013方便下面用户是否具有某一url的访问。

我们看shiro的配置文件,所以的请求都是需要用户登录的



因而用户 在登录成功时候,shiro已经把该用户是否有访问某一url的权限已经判断好了。

看下面简单的代码

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection
principalCollection) {

//获取当前登陆的用户名

String loginName =

(String) principalCollection.fromRealm(getName()).iterator().next();

//根据用户名查找对象

User user = userService.findByLoginName(loginName);

if(user != null) {

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

//添加角色(Set集合<字符串>)

info.setRoles(user.getGroupNameSet());

//迭代用户对应的角色集合,为了获取角色对应的权限

for(UserGroup g : user.getUserGroupList()) {

//添加permission

info.addStringPermissions(g.getPermissionStringList());

}

return info;

}

return null;

}

@Override

protected AuthenticationInfo doGetAuthenticationInfo(

AuthenticationToken authenticationToken) throws AuthenticationException
{

UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;

//根据用户名去查找对象

User user = userService.findByLoginName(token.getUsername());

if(user != null) {

return new SimpleAuthenticationInfo(user.getName(),

user.getPassword(),getName());

}

return null;

}

public void setUserService(UserService userService) {

this.userService = userService;

}

}

shiro其实已经帮我们写好了方法,我们只要去重写 首先看源码

本人系统这个类RapShiroRealm 去实现(抽象类AuthorizingRealm
重写doGetAuthorizationInfo方法 权限认证)

(AuthorizingRealm类又继承AuthenticatingRealm抽象类
shiro开发者帮我们写好了。重写doGetAuthenticationInfo方法 认证回调函数 登录时调用)看上面的两个方法帮助我们更好的去理解。

详细一点的步骤:

首先在访问我们controller的方法上定义好



访问该controller 需要用户携带 demo:simple. 通过重写类AuthorizingRealm的方法doGetAuthorizationInfo
在该方法中,用户在登录的时候执行, SimpleAuthorizationInfo
info = new SimpleAuthorizationInfo();

//添加角色(Set集合<字符串>)

info.setRoles(user.getGroupNameSet());

//迭代用户对应的角色集合,为了获取角色对应的权限

for(UserGroup g : user.getUserGroupList()) {

//添加permission

info.addStringPermissions(g.getPermissionStringList());

} 这段代码 可以把该用户到底拥有哪些permission都存储起来了。

2.由于我们重写了shiro的抽象类AuthorizingRealm
的方法doGetAuthorizationInfo 他在登录的时候就会将登录成功之后改用户是否有哪些地方的url访问权限都存放起来了。要用的时候直接如下图判断:



问题点。
我们写的类RapShiroRealm 加载时机,或者说它是怎么触发的??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: