shiro小记
2019-10-09 09:29:28来源:博客园 阅读 ()
shiro小记
今天主要看了shiro的认证,授权功能初步了解了一下,其他的功能用的不多,之后再看。
认证
下面的例子是以继承了AuthenticatingRealm的自定义Realm来实现自定义认证。
认证依赖于方法doGetAuthenticationInfo,需要返回一个AuthenticationInfo,通常返回一个他的子类SimpleAuthenticationInfo,构造方法的第一个参数是用户名,第二个是验证密码,第三个是当前realm的className。
package com.demo.realms;
import org.apache.shiro.authc.*;
import org.apache.shiro.realm.AuthenticatingRealm;
public class MyRealm extends AuthenticatingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
System.out.println("MyRealm认证中---->用户:"+token.getPrincipal());
// 可以从token中获取用户名来从数据库中查询数据
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String password="123456";// 假设这是从数据库中查询到的用户密码
// 创建一个SimpleAuthenticationInfo,第一个参数是用户名,第二个是验证密码,第三个是当前realm的className
// 验证密码会与用户提交的密码进行比对
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(upToken.getUsername(),password,this.getName());
return info;
}
}
授权
下面的例子是以继承了AuthorizingRealm的自定义Realm来实现自定义认证和自定义授权。
授权依赖于方法doGetAuthorizationInfo,需要返回一个AuthorizationInfo,通常返回一个他的子类SimpleAuthorizationInfo。构造SimpleAuthorizationInfo可以空构造,也可以传入一个Set<String> roles来构造。
package com.demo.realms;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import java.util.HashSet;
import java.util.Set;
public class RealmForDouble extends AuthorizingRealm {
// 授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 1. 获取授权的用户
Object principal = principals.getPrimaryPrincipal();
System.out.println("RealmForDouble授权中---->用户:"+principal);
//2.下面使用Set<String> roles来构造SimpleAuthorizationInfo
SimpleAuthorizationInfo info = null;
// SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
Set<String> roles = new HashSet<>();
if ("admin".equals(principal)){
roles.add("admin"); // 假设这个角色是从数据库中查出的
// 如果SimpleAuthorizationInfo实例化了,
// 可以这样来加角色,行为需要这样添加
// 角色可以传构造函数来实例化SimpleAuthorizationInfo
// info.addRole("admin");
// info.addStringPermission("*");
}
if ("guest".equals(principal)){
roles.add("guest");
}
info = new SimpleAuthorizationInfo(roles);
return info;
}
// 认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("RealmForDouble认证中---->用户:"+token.getPrincipal());
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String password="123456";// 假设这是从数据库中查询到的用户密码
// 创建一个SimpleAuthenticationInfo,第一个参数是用户名,第二个是验证密码,第三个是当前realm的className
// 验证密码会与用户提交的密码进行比对
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(upToken.getUsername(),password,this.getName());
return info;
}
}
以上内容摘自博客:https://www.cnblogs.com/progor/p/10970971.html#%E4%BE%9D%E8%B5%96%E5%8C%85
原文链接:https://www.cnblogs.com/steveshao/p/11636856.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:idea代码模板配置
- 如何用Spring Boot整合Shiro+JWT?这里教大家一最最简单的方 2020-05-13
- springboot整合shiro 报 This application has no explicit 2020-05-04
- Springboot整合shiro框架 2020-04-13
- 关于ssm整合shiro框架 2020-03-31
- 阿里资深架构推荐:Apache Shiro安全框架详解 2020-03-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
