shiro自定义Realm

来源:互联网 发布:淘宝2元包邮怎么赚钱 编辑:程序博客网 时间:2024/05/18 01:45

1.1 自定义Realm

上边的程序使用的是shiro自带的IniRealm,IniRealmini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm。分享牛系列,分享牛专栏,分享牛。

1.1.1 shiro提供的realm

 

 

最基础的是Realm接口,CachingRealm负责缓存处理,AuthenticationRealm负责认证,AuthorizingRealm负责授权,通常自定义的realm继承AuthorizingRealm

1.1.2 自定义Realm

public class CustomRealm1 extends AuthorizingRealm {@Overridepublic String getName() {return "customRealm1";}//支持UsernamePasswordToken@Overridepublic boolean supports(AuthenticationToken token) {return token instanceof UsernamePasswordToken;}//认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//从token中 获取用户身份信息String username = (String) token.getPrincipal();//拿username从数据库中查询//....//如果查询不到则返回nullif(!username.equals("zhang")){//这里模拟查询不到return null;}//获取从数据库查询出来的用户密码 String password = "123";//这里使用静态数据模拟。。//返回认证信息由父类AuthenticatingRealm进行认证SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username, password, getName());return simpleAuthenticationInfo;}}
// 授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 获取身份信息String username = (String) principals.getPrimaryPrincipal();// 根据身份信息从数据库中查询权限数据//....这里使用静态数据模拟List<String> permissions = new ArrayList<String>();permissions.add("user:create");permissions.add("user.delete");//将权限信息封闭为AuthorizationInfoSimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();for(String permission:permissions){simpleAuthorizationInfo.addStringPermission(permission);}return simpleAuthorizationInfo;}


1.1.3 shiro-realm.ini

[main]

#自定义 realm

customRealm=cn.shareniu.shiro.authentication.realm.CustomRealm1

#realm设置到securityManager

securityManager.realms=$customRealm

 

思考:这里为什么不用配置[users]了??

shiro-permission.ini中的[roles]为什么不需要了??

1.1.4 测试代码

测试代码同入门程序,将ini的地址修改为shiro-realm.ini

分别模拟账号不存在、密码错误、账号和密码正确进行测试。

 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) java架构师交流群 523988350

3 0
原创粉丝点击