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

原文地址:https://www.cnblogs.com/qq376324789/p/8642143.html

时间: 2024-11-05 12:33:38

shiro(二)自定义realm,模拟数据库查询验证的相关文章

Shiro Review——自定义Realm实现认证

一,自定义Realm 在之前,使用过下面的ini文件进行认证测试: #对用户信息进行配置 [users] #用户名跟密码 zhangsan=111111 lisi=111111 里面用户的认证信息是写死的,so,now ,来测试下使用自定义Realm来从我们的DB读取User信息,完成用户认证. 首先大致看下Realm的类层级关系: 比如,我们之前使用ini文件中的users配置用户名跟密码的时候,认证和时候使用的Realm就是IniRealm,比如里面的JdbcRealm,我们可以在数据库里面

shiro授权及自定义realm授权(七)

1.授权流程 2.    三种授权方法 Shiro 支持三种方式的授权: 编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole("admin")) { //有权限 } else { //无权限 } 注解式:通过在执行的Java方法上放置相应的注解完成: @RequiresRoles("admin") public void hello() {

shiro学习笔记_0600_自定义realm实现授权

博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 保存到了数据库中.所以需要从数据库中去获取相关的数据信息.可以使用 shiro 提供的JdbcRealm来实现,,也可以自定义realm来实现.使用jdbcRealm往往也不够灵活.所以在实际应用中大多数情况都是自定义Realm来实现. 2,自定义Realm 需要继承 AuthorizingRea

shiro自定义realm支持MD5算法(六)

1.1     散列算法 通常需要对密码 进行散列,常用的有md5.sha, 对md5密码,如果知道散列后的值可以通过穷举算法,得到md5密码对应的明文. 建议对md5进行散列时加salt(盐),进行加密相当 于对原始密码+盐进行散列.(盐就相当于加入一个随机数) 正常使用时散列方法: 在程序中对原始密码+盐进行散列,将散列值存储到数据库中,并且还要将盐也要存储在数据库中. 如果进行密码对比时,使用相同 方法,将原始密码+盐进行散列,进行比对. 1.2 MD5测试 package cn.qlq.

shiro自定义realm(五)

上一节介绍了realm的作用: realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null.token就相当于是对用户输入的用户名和密码的一个封装.下面就是创建一个用户名密码token: UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111"); Realm结构: 自定义realm packa

权限框架 - shiro 自定义realm

上篇文章中是使用的默认realm来实现的简单登录,这仅仅只是个demo,真正项目中使用肯定是需要连接数据库的 首先创建自定义realm文件,如下: 在shiro中注入自定义realm的完全限定类名: 1 [main] 2 # your custom realm path 3 fooRealm=com.lee.shiro.realm.FooRealm 4 # DI such as spring DI 5 securityManager.realms=$fooRealm 自定义realm认证: 1

Shiro自定义Realm时用注解的方式注入父类的credentialsMatcher

用Shiro做登录权限控制时,密码加密是自定义的. 数据库的密码通过散列获取,如下,算法为:md5,盐为一个随机数字,散列迭代次数为3次,最终将salt与散列后的密码保存到数据库内,第二次登录时将登录的令牌再进行同样的运算后再与数据库的做对比. String algorithmName = "md5";String userName = "rose";String password = "rose123";int hashIterations =

【Shiro】Apache Shiro架构之自定义realm

之前写的博客里都是使用.ini文件来获取信息的,包括用户信息,角色信息,权限信息等.进入系统时,都是从.ini文件这读取进入的.实际中除非这个系统特别特别简单,否则一般都不是这样干的,这些信息都是需要在数据库中进行维护的,所以就需要用到自定义realm了. 写在前面:这篇博文是基于上一篇Shiro集成web基础之上修改的. 1. 数据库建表 首先在数据库中新建三个表:t_user,t_role和t_permission,分别存储用户信息,角色信息和权限信息,建表语句如下: CREATE TABL

Shiro学习笔记(2)——身份验证之Realm

环境准备 什么是Realm 为什么要用Realm 自定义Realm 多个Realm 配置Authenticator和AuthenticationStrategy 自定义AuthenticationStrategy验证策略 多个Realm验证顺序 环境准备 创建java工程 需要的jar包 大家也可以使用maven,参考官网 什么是Realm 在我所看的学习资料中,关于Realm的定义,写了整整一长串,但是对于初学者来说,看定义实在是太头疼了. 对于什么是Realm,我使用过之后,个人总结一下:s