package com.test.shiro.realms;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import com.test.shiro.po.User;
public class ShiroRealm extends AuthorizingRealm{
private static Map<String,User> userMap = new HashMap<String,User>();
static{
//使用Map模拟数据库获取User表信息
userMap.put("administrator", new User("administrator","5703a57069fce1f17882d283132229e0",false));//密码明文:aaa123
userMap.put("jack", new User("jack","43e66616f8730a08e4bf1663301327b1",false));//密码明文:aaa123
userMap.put("tom", new User("tom","3abee8ced79e15b9b7ddd43b95f02f95",false));//密码明文:bbb321
userMap.put("jean", new User("jean","1a287acb0d87baded1e79f4b4c0d4f3e",true));//密码明文:ccc213
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
System.out.println("[ShiroRealm]");
//1.把AuthenticationToken转换为UsernamePasswordToken
UsernamePasswordToken userToken = (UsernamePasswordToken) token;
//2.从UsernamePasswordToken中获取username
String username = userToken.getUsername();
//3.调用数据库的方法,从数据库中查询Username对应的用户记录
System.out.println("从数据看中获取UserName为"+username+"所对应的信息。");
//Map模拟数据库取数据
User u = userMap.get(username);
//4.若用户不行存在,可以抛出UnknownAccountException
if(u==null){
throw new UnknownAccountException("用户不存在");
}
//5.若用户被锁定,可以抛出LockedAccountException
if(u.isLocked()){
throw new LockedAccountException("用户被锁定");
}
//7.根据用户的情况,来构建AuthenticationInfo对象,通常使用的实现类为SimpleAuthenticationInfo
//以下信息是从数据库中获取的
//1)principal:认证的实体信息,可以是username,也可以是数据库表对应的用户的实体对象
Object principal = u.getUsername();
//2)credentials:密码
Object credentials = u.getPassword();
//3)realmName:当前realm对象的name,调用父类的getName()方法即可
String realmName = getName();
//4)credentialsSalt盐值
ByteSource credentialsSalt = ByteSource.Util.bytes(principal);//使用账号作为盐值
SimpleAuthenticationInfo info = null; //new SimpleAuthenticationInfo(principal,credentials,realmName);
info = new SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName);
return info;
}
//加密测试方法
public static void main(String[] args) {
User u = null;
Iterator<String> it = userMap.keySet().iterator();
while(it.hasNext()){
u = userMap.get(it.next());
String hashAlgorithmName = "MD5";//加密方式
Object crdentials = u.getPassword();//密码原值
ByteSource salt = ByteSource.Util.bytes(u.getUsername());//以账号作为盐值
int hashIterations = 1024;//加密1024次
Object result = new SimpleHash(hashAlgorithmName,crdentials,salt,hashIterations);
System.out.println(u.getUsername()+":"+result);
}
}
//给Shiro的授权验证提供授权信息
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
//1.从principals中获取登录用户的信息
Object principal = principals.getPrimaryPrincipal();
//2.利用登录用户的信息获取当前用户的角色(有数据库的话,从数据库中查询)
Set<String> roles = new HashSet<String>();//放置用户角色的set集合(不重复)
roles.add("user");//放置所有用户都有的普通用户角色
if("administrator".equals(principal)){
roles.add("admin");//当账号为administrator时,添加admin角色
}
//3.创建SimpleAuthorizationInfo,并设置其roles属性
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
//4.返回SimpleAuthorizationInfo对象
return info;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
shiro与spring整合工程源代码
共57个文件
jar:22个
xml:7个
class:7个
需积分: 15 20 下载量 94 浏览量
2018-03-08
20:40:03
上传
评论
收藏 9.26MB ZIP 举报
温馨提示
shiro与spring整合工程源代码,可以解压之后直接部署到Eclipse中运行。相关问题可以至我的博客中留言。
资源推荐
资源详情
资源评论
收起资源包目录
Shiro3.zip (57个子文件)
Shiro3
.project 1KB
.settings
.jsdtscope 522B
org.eclipse.core.resources.prefs 66B
org.eclipse.wst.common.component 477B
org.eclipse.jdt.core.prefs 364B
org.eclipse.wst.common.project.facet.core.xml 398B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.name 6B
WebRoot
login.jsp 473B
WEB-INF
spring-servlet.xml 1007B
web.xml 2KB
lib
spring-core-4.0.0.RELEASE.jar 933KB
spring-aspects-4.0.0.RELEASE.jar 50KB
spring-beans-4.0.0.RELEASE.jar 654KB
ehcache-core-2.4.3.jar 983KB
com.springsource.net.sf.cglib-2.2.0.jar 319KB
spring-tx-4.0.0.RELEASE.jar 242KB
spring-context-support-4.0.0.RELEASE.jar 131KB
log4j-1.2.15.jar 383KB
spring-aop-4.0.0.RELEASE.jar 343KB
shiro-all-1.3.2.jar 570KB
slf4j-log4j12-1.6.1.jar 10KB
com.springsource.org.aopalliance-1.0.0.jar 5KB
spring-context-4.0.0.RELEASE.jar 928KB
spring-orm-4.0.0.RELEASE.jar 309KB
spring-jdbc-4.0.0.RELEASE.jar 410KB
commons-logging-1.1.3.jar 61KB
jackson-all-1.9.11.jar 1.07MB
spring-web-4.0.0.RELEASE.jar 646KB
slf4j-api-1.6.1.jar 25KB
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar 1.57MB
spring-expression-4.0.0.RELEASE.jar 202KB
spring-webmvc-4.0.0.RELEASE.jar 645KB
classes
com
test
shiro
services
ShiroService.class 2KB
realms
TestRealm.class 883B
SecordRealm.class 4KB
ShiroRealm.class 5KB
controller
ShiroLoginController.class 2KB
po
User.class 1KB
factory
FilterChainDefinitionMapBuilder.class 1KB
applicationContext.xml 6KB
ehcache.xml 1KB
index.jsp 270B
admin.jsp 264B
META-INF
MANIFEST.MF 39B
User.jsp 262B
list.jsp 818B
src
com
test
shiro
services
ShiroService.java 638B
realms
SecordRealm.java 3KB
TestRealm.java 797B
ShiroRealm.java 4KB
controller
ShiroLoginController.java 2KB
po
User.java 680B
factory
FilterChainDefinitionMapBuilder.java 869B
applicationContext.xml 6KB
ehcache.xml 1KB
.classpath 961B
共 57 条
- 1
资源评论
光仔December
- 粉丝: 5661
- 资源: 48
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功