Shiro框架学习

一、组成部分

Subject

Subject是shiro的一个接口,接口中定义了很多认证授权的方法。外部应用与subject进行交互,subject记录当前用户。

SecurityManager

SecurityManager是安全管理器,对全部Subject进行管理。以接口形式存在,同时继承了Authenticator、Authorizer和SessionManager。

SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理。

Authenticator

认证器接口,对用户身份进行认证。

Authorizer

通过Authenticator认证器通过认证,在访问功能时通过授权器判断是否有操作权限。

Realm

SecurityManager进行安全认证需要通过Realm获取用户权限数据。Realm可以简单理解为datasource数据源,还有认证授权校验的部分内容。

SessionManager

会话管理,不依赖web容器的session,可以使用在非web应用上。

SessionDAO

会话dao,是对session会话操作的一套接口。例如可以将session存储到数据库。

CacheManager

缓存管理。

Cryptography

shiro提供了一套加解密组件,Cryptography就是密码管理。

二、Shiro认证

 自定义Realm

 

public class UserRealm extends AuthorizingRealm {

    //认证
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(
			AuthenticationToken token) throws AuthenticationException {
		
		//从token中 获取用户身份信息
		String username = (String) token.getPrincipal();
		//拿username从数据库中查询
		//....

        //返回认证信息由父类AuthenticatingRealm进行认证
		SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
				username, password, getName());

		return simpleAuthenticationInfo;
    }

    //授权
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(
			PrincipalCollection principals) {
		// TODO Auto-generated method stub
		return null;
	}

}

三、Shiro授权

 授权方式

Shiro支持三种授权方式:

1、编程式:

Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
//有权限
} else {
//无权限
}

2、注解式:

@RequiresRoles("admin")
public void test() {
//有权限
}
或者:
@RequiresPermissions("visu:list")
public void test() {
//有权限
}

 3、页面标签:

<shiro:hasRole name="admin">
<!— 有权限—>
</shiro:hasRole>

自定义Realm

// 授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
		PrincipalCollection principals) {
	// 获取身份信息
	String username = (String) principals.getPrimaryPrincipal();
	// 根据身份信息从数据库中查询权限数据
	//....这里使用静态数据模拟
	List<String> permissions = new ArrayList<String>();
	permissions.add("user:create");
	permissions.add("user:delete");
	
	//将权限信息封闭为AuthorizationInfo
	
	SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
	for(String permission:permissions){
		simpleAuthorizationInfo.addStringPermission(permission);
	}
	
	return simpleAuthorizationInfo;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值