添加shiro-realm.ini文件
[main]
#自定义Realm
myRealm=test.shiro.MyRealm
#将myRealm设置到securityManager,相当于Spring中的注入
securityManager.realms=$myRealm
自定义MyRealm.java文件
/**
* 认证
* @param token
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//token是用户输入的
//1、从token中取出身份信息
String account = (String) token.getPrincipal();
//2、根据取到的account到数据库中查询是否存在,此时数据库密码是明文存在,pwd=111111
User user = iUserService.selectUer(account);
if(user == null) return null;
//3、如果查询得到数据就返回认证信息,查不到就返回null
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user.getAccount(), user.getPwd, this.getName());
return info;
}
测试
/**
* 通过自定义Realm对数据库中的账号密码进行认证
*/
@Test
public void testMyRealm(){
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-realm.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("admin", "111111");
subject.login(token);
System.out.println("认证状态:"+subject.isAuthenticated());
subject.logout();
System.out.println("认证状态:"+subject.isAuthenticated());
}
输出结果
认证状态:true
认证状态:false