实现realm
实现realm需要继承AuthorizingRealm
/**
* shiro
* @author yvan
*
*/
public class ShiroRealm extends AuthorizingRealm {
/*
* 登录信息和用户验证信息验证(non-Javadoc)
* @see org.apache.shiro.realm.AuthenticatingRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken)
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String)token.getPrincipal(); //得到用户名
String password = new String((char[])token.getCredentials()); //得到密码
if(null != username && null != password){
return new SimpleAuthenticationInfo(username, password, getName());
}else{
return null;
}
}
/*
* 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用,负责在应用程序中决定用户的访问控制的方法(non-Javadoc)
* @see org.apache.shiro.realm.AuthorizingRealm#doGetAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection)
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pc) {
// TODO 实现自己的权限验证数据的获取和验证
return null;
}
}
什么时候执行doGetAuthenticationInfo
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
在调用 subject.login(token)的时候
什么时候执行doGetAuthorizationInfo
- 代码中显示调用
subject.hasRole("admin")
- jsp标签中判断是否有权限
注:需要引入标签库
<%@ taglib prefix=”shiro” uri=”http://shiro.apache.org/tags”%>
<shiro:hasRole name="管理员">
<h2>管理员</h2>
</shiro:hasRole>