博主首页

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一步一步去看的;后面还会继续后面的步骤。

 

posted @   笑~笑  阅读(409)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示