06_shrio简单入门及加密

权限框架(做身份验证、授权的功能、会话管理、加密):
常见的有springsecurity(使用比较复杂) 、shiro
我们今天学习shiro
Shiro官方网站:
http://www.apache.org/
http://shiro.apache.org/


我们这里不是用最新的版本,企业一般也是这样的。


1shiroDemo ,首先创建一个java工程
2 加包


3 创建模拟数据库的数据,这里先创建一个user-realm.ini文件
[users]
#账号及密码
zhangsan=111
lishi=111
4 认证测试
public static void main(String[] args) {
first();
//second();
}
private static void first() {
// 创建securityManager工厂,通过ini配置文件创建securityManager工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory(
"classpath:user-realm.ini");
// 创建SecurityManager
SecurityManager securityManager=factory.getInstance();
//将securityManager设置当前的运行环境中
SecurityUtils.setSecurityManager(securityManager);
// 从SecurityUtils里边创建一个subject
Subject subject=SecurityUtils.getSubject();
在认证提交前准备token(令牌)
UsernamePasswordToken token=new UsernamePasswordToken("zhangsan", "111");
try{
// 执行认证提交
subject.login(token);
}catch(Exception e){
e.printStackTrace();

}
//是否认证通过
boolean flag= subject.isAuthenticated();
System.out.println("flag="+flag);
}
运行结果,认证通过 true

//-------------------------------------------------------
模拟登陆认证
1认证代码测试:
public static void main(String[] args) {
//first();
second();
}

private static void second() {
// 创建securityManager工厂,通过ini配置文件创建securityManager工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory(
"classpath:customer-realm.ini");
// 创建SecurityManager
SecurityManager securityManager=factory.getInstance();
//将securityManager设置当前的运行环境中
SecurityUtils.setSecurityManager(securityManager);
// 从SecurityUtils里边创建一个subject
Subject subject=SecurityUtils.getSubject();
在认证提交前准备token(令牌)
UsernamePasswordToken token=new UsernamePasswordToken("aaa", "123");
try{
// 执行认证提交
subject.login(token);
}catch(Exception e){
e.printStackTrace();

}
//是否认证通过
boolean flag= subject.isAuthenticated();
System.out.println("flag="+flag);

}
2 创建customer-realm.ini 文件
a=cn.hd.test.CustomerRealm
securityManager.realms=$a
3 创建 CustomerRealm 类
package cn.hd.test;

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;

public class CustomerRealm extends AuthorizingRealm{
//身份认证 登录
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
//1、先得到你输入的用户名
String username=(String) token.getPrincipal();
//2、再根据用户名到数据库中查找是否有这个用户
// 模拟数据,假设aaa是正确的用户名 123是正确的密码
if(!"aaa".equals(username)){
return null;
}
//执行了这个说明认证通过
AuthenticationInfo info= new SimpleAuthenticationInfo(username, "123", "myrealn");

return info;
}

//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
// TODO Auto-generated method stub
return null;
}



}


//md5 加密相关:
Select MD5(password) from t_user;
package cn.hd.test;

import org.apache.shiro.crypto.hash.Md5Hash;

public class Test02 {

public static void main(String[] args) {
String pwd="123456";//e10adc3949ba59abbe56e057f20f883e
Md5Hash md5=new Md5Hash(pwd);
System.out.println(md5.toString());

md5=new Md5Hash(pwd,"520");
System.out.println(md5.toString());

md5=new Md5Hash(pwd,"520",2);//md5(md5(pwd))
System.out.println(md5.toString());

}

}


注意数据库保存的密码一到要加密。
详细请看源码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值