博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro实例(三)
阅读量:6083 次
发布时间:2019-06-20

本文共 2876 字,大约阅读时间需要 9 分钟。

hot3.png

测试实例:

// 自定义realm实现散列值匹配	@Test	public void testCustomRealmMd5() {		// 创建securityManager工厂,通过ini配置文件创建securityManager工厂		Factory
 factory = new IniSecurityManagerFactory( "classpath:shiro-realm-md5.ini"); // 创建SecurityManager SecurityManager securityManager = factory.getInstance(); // 将securityManager设置当前的运行环境中 SecurityUtils.setSecurityManager(securityManager); // 从SecurityUtils里边创建一个subject Subject subject = SecurityUtils.getSubject(); // 在认证提交前准备token(令牌) // 这里的账号和密码 将来是由用户输入进去 UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111"); try { // 执行认证提交 subject.login(token); } catch (AuthenticationException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 是否认证通过 boolean isAuthenticated = subject.isAuthenticated(); System.out.println("是否认证通过:" + isAuthenticated); }

md5实例:

package cn.itcast.shiro.realm;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.SimpleAuthenticationInfo;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.util.ByteSource;/** *  * @author Administrator * */public class CustomRealmMd5 extends AuthorizingRealm {	// 设置realm的名称	@Override	public void setName(String name) {		super.setName("customRealmMd5");	}	// 用于认证	@Override	protected AuthenticationInfo doGetAuthenticationInfo(			AuthenticationToken token) throws AuthenticationException {		// token是用户输入的		// 第一步从token中取出身份信息		String userCode = (String) token.getPrincipal();		// 第二步:根据用户输入的userCode从数据库查询		// ....		// 如果查询不到返回null		// 数据库中用户账号是zhangsansan		/*		 * if(!userCode.equals("zhangsansan")){// return null; }		 */		// 模拟从数据库查询到密码,散列值		String password = "f3694f162729b7d0254c6e40260bf15c";		// 从数据库获取salt		String salt = "qwerty";		// 上边散列值和盐对应的明文:111111		// 如果查询到返回认证信息AuthenticationInfo		SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(				userCode, password, ByteSource.Util.bytes(salt), this.getName());		return simpleAuthenticationInfo;	}	// 用于授权	@Override	protected AuthorizationInfo doGetAuthorizationInfo(			PrincipalCollection principals) {		// TODO Auto-generated method stub		return null;	}}

配置文件:

[main]#\u5b9a\u4e49\u51ed\u8bc1\u5339\u914d\u5668credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher#\u6563\u5217\u7b97\u6cd5credentialsMatcher.hashAlgorithmName=md5#\u6563\u5217\u6b21\u6570credentialsMatcher.hashIterations=1#\u5c06\u51ed\u8bc1\u5339\u914d\u5668\u8bbe\u7f6e\u5230realmcustomRealm=cn.itcast.shiro.realm.CustomRealmMd5customRealm.credentialsMatcher=$credentialsMatchersecurityManager.realms=$customRealm

输出结果:

是否认证通过:true

转载于:https://my.oschina.net/Tsher2015/blog/655167

你可能感兴趣的文章
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>