概述
package cn.com.test;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.realm.Realm;
public class MyRealm implements Realm {
/**
* 判断你当前使用的Token的类型是否为指定的类型
*/
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal(); //取得用户名
//在shiro里面是利用字符数组实现了密码的传递,所以不能将其变为String
String password = new String((char[]) token.getCredentials()); //取得密码
//此时直接使用一个固定的用户名和密码进行验证处理操作
if(!"admin".equals(username)){
throw new UnknownAccountException("用户名不存在!");
}
if(!"hello".equals(password)){
throw new IncorrectCredentialsException("密码输入错误!") ;
}
return new SimpleAuthenticationInfo(username,password,this.getName());
}
// 返回一个当前使用的Realm名字,这个名字可以任意返回,但是不要重名
public String getName() {
return "张三好么?"; //只是一个标记
}
/**
* 得到用户的认证信息,根据传入的Token取得
* token 包含了要进行验证的所有数据 身份验证
*
*/
public boolean supports(AuthenticationToken token) {
// 本次将在之前程序的基础之上继续使用UsernamePasswordToken完成信息的传递
return token instanceof UsernamePasswordToken;
}
}
package cn.com.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class TestLoginDemo {
public static void main(String[] args) {
//取得Factory接口对象,主要的目的是用过配置文件加载文件之中的信息,这些信息暂时不能够成为认证信息
Factory<org.apache.shiro.mgt.SecurityManager> factroy = new
IniSecurityManagerFactory("classpath:shiro.ini") ;
//取得里面所保存的所有的认证数据信息
org.apache.shiro.mgt.SecurityManager securityManager = factroy.getInstance() ;
//利用一个专门的认证操作的处理类,实现认证处理的具体实现
SecurityUtils.setSecurityManager(securityManager);
//获取进行用户名和密码认证的接口对象
Subject subject = SecurityUtils.getSubject() ;
//定义一个Token,里面保存要登录的用户和密码
UsernamePasswordToken token = new UsernamePasswordToken("mermaid","hello") ;
//实现用户登录处理
subject.login(token);
//取得用户名
System.out.println(subject.getPrincipal());
}
}
Shiro普通认证
myRealm=cn.com.realm.MyRealm # 整个Shiro中的验证处理都是由SecurityManager接口负责的 securityManager.realms=$myRealm
基于数据库
需要建立一张数据表:member
用户ID varchar(50)pk
密码 varchar(32)
Shiro.ini文件
[main]
dataSource=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
dataSource.serverName=127.0.0.1
dataSource.databaseName=shirodb
dataSource.user=root
dataSource.password=mysqladmin
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$dataSource
jdbcRealm.authenticationQuery=SELECT password FROM members WHERE mid=?
securityManager.realms=$jdbcRealm
最后
以上就是热情小伙为你收集整理的shiro开发框架,固定信息Realm认证的全部内容,希望文章能够帮你解决shiro开发框架,固定信息Realm认证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复