shiro(二)自定义realm,模拟数据库查询验证

时间:2023-03-08 23:44:32
shiro(二)自定义realm,模拟数据库查询验证

自定义一个realm类,实现realm接口

package com;

import org.apache.shiro.authc.*;
import org.apache.shiro.realm.Realm; public class MyRealm implements Realm {
/**
* 获取当前realm的名称
* @return
*/
@Override
public String getName() {
return "MyRealm";
} /**
* 判断当前认证方式是不是用户名和密码
* @param authenticationToken
* @return
*/
@Override
public boolean supports(AuthenticationToken authenticationToken) {
return authenticationToken instanceof UsernamePasswordToken;
} /**
* 返回认证信息,这里可以使用链接数据库查询进行判断
* 只是模拟登录,有兴趣者可以访问数据库进行判断
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
/*获取用户名*/
String username = authenticationToken.getPrincipal().toString();
/*获取密码,由于密码是进行了加密的,所以必须转为char数组再转String
* 否则无法识别*/
String password =String.valueOf((char [])authenticationToken.getCredentials());
if (!"admin".equals(username)){
throw new AuthenticationException();
}
if (!"666".equals(password)){
throw new AuthenticationException();
}
/*返回认证的结果*/
return new SimpleAuthenticationInfo(username,password,this.getName());
}
}

将自定义realm类配置到.ini文件中

[main]
#这里相当于实例化了一个realm对象,这里写的是类路径
myRealm=com.MyRealm #这里相当于set进去一个参数
securityManager.realms=$myRealm #[users],由于采用的自定义realm,所以此处不会被读取了
#admin=admin [roles]
admin=123

测试代码请点击此处链接http://www.cnblogs.com/qq376324789/p/8640651.html

*提示

  subject就相当于当前用户,realm就相当于dao,上面的代码应该一步一步的写的很清楚了,直接复制进去就应该可以正常运行的;

真正理解还是需要自己debug一步一步去看的;后面还会继续后面的步骤。