博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shiro的Demo示例
阅读量:7014 次
发布时间:2019-06-28

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

  hot3.png

多余的就不说了,,

直接上代码了。

package com.shiro.lh.demo2;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.DisabledAccountException;
import org.apache.shiro.authc.ExcessiveAttemptsException;
import org.apache.shiro.authc.ExpiredCredentialsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.HashRequest;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ByteSource;
import org.apache.shiro.util.Factory;
import org.apache.shiro.crypto.hash.DefaultHashService;
import org.apache.shiro.util.SimpleByteSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ShiroDemo2
{
private static Logger logger = LoggerFactory.getLogger(ShiroDemo2.class); 
public static void main(String[] args)
{
//获取SecurityManagerFactory工厂,也可以使用数据库来获取,这里使用ini文件来初始化
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//得到SecurityManger,并且进行绑定到SecuriUtils
SecurityManager securityManager = (SecurityManager)factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
//得到Subject及创建用户名/密码身份验证Token(用户身份或者是凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("lh", "123123");
try
{
subject.login(token);
}
catch (UnknownAccountException uae)
{
logger.info("用户名为【" + token.getPrincipal() + "】不存在");
}
catch (IncorrectCredentialsException ice)
{
logger.info("用户名为【 " + token.getPrincipal() + " 】密码错误!");
}
catch (LockedAccountException lae)
{
logger.info("用户名为【" + token.getPrincipal() + " 】的账户锁定,请联系管理员。");
}
catch(DisabledAccountException dax)
{
logger.info("用户名为:【" + token.getHost() + "】用户已经被禁用.");
}
catch(ExcessiveAttemptsException eae)
{
logger.info("用户名为:【" + token.getHost() + "】的用户登录次数过多,有暴力破解的嫌疑.");
}
catch(ExpiredCredentialsException eca)
{
logger.info("用户名为:【" + token.getHost() + "】用户凭证过期.");
}
catch (AuthenticationException ae)
{
logger.info("用户名为:【" + token.getHost() + "】用户验证失败.");
}
catch(Exception e)
{
logger.info("别的异常信息。。。。具体查看继承关系");
}
//
logger.info("用户名 【" + subject.getPrincipal() + "】密码:【" + subject.getPrincipal() + "】登录成功.");
if(subject.hasRole("user"))
{
logger.info("拥有【user】角色。");
}
else
{
logger.info("不存在user权限。");
}
try
{
subject.checkPermission("users:create:del:upd");
}
catch (AuthorizationException e)
{
e.printStackTrace();
}
if(subject.isPermitted("users:create"))
{
logger.info("拥有【users:del】删除权限");
}
else
{
logger.info("不存在【users:del】删除权限");
}
logger.info(subject.getPrincipal().toString() + "用户 登录状态:" + subject.isAuthenticated());
subject.logout();
//对密码md5加密,并且进行私盐
String baseCode = new Md5Hash("123123", "1223").toString();
// System.out.println(baseCode);
/**使用私盐和公盐进行加密****/
DefaultHashService hashService = new DefaultHashService(); //默认算法SHA-512
hashService.setHashAlgorithmName("SHA-384");
hashService.setPrivateSalt(new SimpleByteSource("zhongguo")); //私盐,默认无
hashService.setRandomNumberGenerator(new SecureRandomNumberGenerator());//用于生成公盐。默认就是这个
hashService.setHashIterations(2); //生成Hash值的迭代次数
hashService.setGeneratePublicSalt(true); //是否生成公盐,默认false
HashRequest request = new HashRequest.Builder()
.setAlgorithmName("MD5").setSource(ByteSource.Util.bytes("Rayn123"))
.setSalt(ByteSource.Util.bytes("123123")).setIterations(2).build();
String hex = hashService.computeHash(request).toHex();
System.out.println(hex);
}
}

转载于:https://my.oschina.net/Rayn/blog/214708

你可能感兴趣的文章
awk打印指定列以后的所有内容
查看>>
代码16
查看>>
用 kGDB 调试 Linux 内核
查看>>
ActiveMQ发布-订阅消息模式
查看>>
2017.3找工作面试记录-第一周(2)
查看>>
vuejs2.0子组件改变父组件的数据
查看>>
Java开发环境配置(4)--Maven安装 环境变量配置,本地仓库配置---插件安装
查看>>
【NIO】Java NIO之通道
查看>>
HDU 4287 Intelligent IME(map运用)
查看>>
[LeetCode] Subtree of Another Tree 另一个树的子树
查看>>
说说这些年做的云计算和大数据项目
查看>>
P1019 单词接龙
查看>>
linux下的开源移动图像监测程序--motion编译与配置【转】
查看>>
git的版本回退探索
查看>>
记一次docker问题定位(perf,iostat等性能分析)
查看>>
H3c 配置ssh acl
查看>>
【IntellJ IDEA】idea上 实现了Serializable接口,要自动生成serialVersionUID的方法
查看>>
帮助函数
查看>>
自己动手写Android插件化框架,让老板对你刮目相看
查看>>
[转]Object.keys()和for in的排序问题
查看>>