Shiro架构和Hello World的示例分析
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,今天就跟大家聊聊有关Shiro架构和Hello World的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Shiro 一个Apache
千家信息网最后更新 2024年12月13日Shiro架构和Hello World的示例分析
今天就跟大家聊聊有关Shiro架构和Hello World的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
Shiro 一个Apache 权限处理框架,现在更流行于security,能够指定用户的具体操作哪一个按钮,搭配接口,通过注解实现。
官网:
http://shiro.apache.org/download.html
主要涉及
权限管理,权限认证,session管理,加密
支持web,缓存,并发,测试,记住我
Shiro架构
Subject 当前用户
Security 管理subject
Realm 相当于RealmDao
Hello World
找到官网下载zip包。解压后
找到samples/quickstart/QuickStart.java
并将resource下面的配置复制
QuickStart.java
注释已经写在代码内
public class Quickstart {
private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);
public static void main(String[] args) {
// The easiest way to create a Shiro SecurityManager with configured
// realms, users, roles and permissions is to use the simple INI config.
// We'll do that by using a factory that can ingest a .ini file and
// return a SecurityManager instance:
// Use the shiro.ini file at the root of the classpath
// (file: and url: prefixes load from files and urls respectively):
Factory
factory = new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager = factory.getInstance();
// for this simple example quickstart, make the SecurityManager
// accessible as a JVM singleton. Most applications wouldn't do this
// and instead rely on their container configuration or web.xml for
// webapps. That is outside the scope of this simple quickstart, so
// we'll just do the bare minimum so you can continue to get a feel
// for things.
SecurityUtils.setSecurityManager(securityManager);
// Now that a simple Shiro environment is set up, let's see what you can do:
// get the currently executing user:
//获取当前的subject SecurityUtils.getSubject()
Subject currentUser = SecurityUtils.getSubject();
// Do some stuff with a Session (no need for a web or EJB container!!!)
//获取session
Session session = currentUser.getSession();
//放入属性
session.setAttribute("someKey", "aValue");
//验证是否取到
String value = (String) session.getAttribute("someKey");
if (value.equals("aValue")) {
log.info("Retrieved the correct value! -*******[" + value + "]");
}
// let's login the current user so we can check against roles and permissions:
//测试是否被认证
if (!currentUser.isAuthenticated()) {
//用户名密码封装
UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
//记住我
token.setRememberMe(true);
try {
//执行登录
currentUser.login(token);
//如果没有指定的用户
} catch (UnknownAccountException uae) {
log.info("There is no user with username of " + token.getPrincipal());
//密码错误
} catch (IncorrectCredentialsException ice) {
log.info("Password for account " + token.getPrincipal() + " was incorrect!");
//用户被锁定
} catch (LockedAccountException lae) {
log.info("The account for username " + token.getPrincipal() + " is locked. " +
"Please contact your administrator to unlock it.");
}
// ... catch more exceptions here (maybe custom ones specific to your application?
//总的认证异常处理
catch (AuthenticationException ae) {
//unexpected condition? error?
}
}
//say who they are:
//print their identifying principal (in this case, a username):
log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
//test a role:
//测试是否有某一个角色
if (currentUser.hasRole("schwartz")) {
log.info("May the Schwartz be with you!");
} else {
log.info("Hello, mere mortal.");
}
//test a typed permission (not instance-level)
//测试用户是否有一个行为 weild
//isPermitted The 'schwartz' role can do anything (*) with any lightsaber:
if (currentUser.isPermitted("lightsaber:weild")) {
log.info("You may use a lightsaber ring. Use it wisely.");
} else {
log.info("Sorry, lightsaber rings are for schwartz masters only.");
}
//a (very powerful) Instance Level permission:
//goodguy = winnebago:drive:eagle5 更具体的行为
if (currentUser.isPermitted("winnebago:drive:eagle5")) {
log.info("You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'. " +
"Here are the keys - have fun!");
} else {
log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
}
//all done - log out!
currentUser.logout();
System.exit(0);
}
}
实际应用
@RequiresPermissions("risk:thirdInterface:view")
@GetMapping()
public String thirdInterface(ModelMap map, ThirdInterface thirdInterface) {
List
thirdInterfaceList = thirdInterfaceService.selectThirdInterfaceList(thirdInterface); map.put("list", thirdInterfaceList);
return prefix + "/thirdInterface";
}
配合前端
var editFlag = [[${@permission.hasPermi('system:user:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:user:remove')}]];
formatter: function(value, row, index) {
var actions = [];
actions.push('编辑 ');
actions.push('删除 ');
actions.push('重置');
return actions.join('');
}
在角色的分配操作时指定是否拥有某个按钮的权限操作。
看完上述内容,你们对Shiro架构和Hello World的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
用户
权限
测试
架构
内容
管理
认证
示例
分析
密码
按钮
行为
角色
处理
支持
代码
前端
实际
属性
接口
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何进行数据库的概念设计
滨州招商网络安全公司
数据库原理期末考试题
广东汽车软件开发报价
数据库开发技术pdf
软件正版化数据库
网络安全宣传片手抄报内容
svn服务器端
青少年网络安全纪录片
怎么是计算机软件开发
华为网络技术工程师面试问题
专业服务器如何实现安全防护的
理想网络技术股份有限公司
舟山学软件开发总结
宿州直播平台软件开发定制
远程教学软件开发
莫子软件开发工作室
东港软件开发技术在线咨询
华为软件开发笔试难吗
姑苏区信息化网络技术参考价格
服务器ddos选择
我是网络安全卫士手抄报
硬盘设置网络服务器
2020年网络安全提醒短信
远程教学软件开发
服务器光模块安装方法
zlhx网络安全加密系统
运行svn服务器端
吉林特种网络技术分类代理商
平安包头讲座网络安全