范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

手把手带你掌握JavaShiro安全框架,看完即用

  Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
  Shrio的主要功能:Authentication:用户认证(登录)Authorization:权限控制Session Management:会话管理Cryptography:数据加密Web Support:支持web的APICaching:缓存Concurrency:支持多线程应用程序Testing:测试的支持"Run As":假设一个用户为另一个用户的身份"Remember Me":在Session中保存用户身份基本原理Shiro的基本架构:
  Shiro有三个核心的概念:Subject、SecurityManager和Realms。Subject:Subject实质上是一个当前执行用户的特定的安全"视图",开发者所写的应用代码就通过Subject与Shiro框架进行交互。所有Subject实例都必须绑定到一个SecurityManager上,当使用一个Subject实例时,Subject实例会和SecurityManager进行交互,完成相应操作。SecurityManager:SecurityManager是Shiro的核心部分,作为一种"保护伞"对象来协调内部安全组件共同构成一个对象图。开发人员并不直接操作SecurityManager,而是通过Subject来操作SecurityManager来完成各种安全相关操作。Realms:Realms担当Shiro和应用程序的安全数据之间的"桥梁"或"连接器"。从本质来讲,Realm是一个特定安全的DAO,Realm中封装了数据操作的模块和用户自定义的认证匹配过程。SecurityManager可能配置多个Realms,但至少要有一个。使用方法
  注:该示例基于一个Maven管理的SSH项目
  1. 在Maven中添加Shiro依赖     org.apache.shiro     shiro-all     1.2.3 
  注:Shiro官方现在不推荐这种用法,因为可能会导致Maven运行错误
  2. 在web.xml添加核心过滤器,且必须放在Struts2核心过滤器前面     shiroFilter     org.springframework.web.filter.DelegatingFilterProxy              targetFilterLifecycle         true            shiroFilter     /* 
  3.在Spring配置文件中添加如下代码,且放在事务管理器之前
  4. 在Spring配置文件中配置Shiro,建议单独出一个applicationContext-shiro.xml进行配置(编写完成后记得在总的配置文件中引入该配置文件)applicationContext-shiro.xml <?xml version="1.0" encoding="UTF-8"?>                                                                                                                                                                                                                                                       /index.jsp* = anon                 /home* = anon                 /sysadmin/login/login.jsp* = anon                 /sysadmin/login/logout.jsp* = anon                 /login* = anon                 /logout* = anon                 /components/** = anon                 /css/** = anon                 /images/** = anon                 /js/** = anon                 /make/** = anon                 /skin/** = anon                 /stat/** = anon                 /ufiles/** = anon                 /validator/** = anon                 /resource/** = anon                 /** = authc                 /*.* = authc                                                                                                              
  在这里配置了核心的SecurityManager,SecurityManager中注入了realm和cacheManager,因此需要配置realm和cacheManager,Realm是自定义的,其中注入了userService,用来进行查询数据库数据的相关操作,还注入了credentialsMatcher属性,这个是开发者自定义的比较器。配置CacheManager时,使用了ehcache,在最后也进行了配置,并且编写了ehcache的配置文件,这些操作在下述步骤进行。
  在shiroFilter的配置中配置了要过滤的目录,其中一个*号表示匹配当前目录后的参数,两个*号表示匹配该目录及其子目录及参数。等号后面是Shiro各类过滤器的简称,anon表示匿名过滤器,表示可以匿名访问这些资源,authc表示需要验证用户身份才能访问,还有8种过滤器,在此就不再详述了。
  5. Ehcache的配置文件ehcache-shiro.xml <?xml version="1.0" encoding="UTF-8"?>           
  6. 编写自定义的credentialsMatcherDemoCredentialsMatcher.java public class DemoCredentialsMatcher extends SimpleCredentialsMatcher {       /**      * 密码比较的规则      * token:用户在界面输入的用户名和密码      * info: 从数据库中得到的加密数据      */     @Override     public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {         // 获取用户输入的密码,并加密         UsernamePasswordToken upToken = (UsernamePasswordToken) token;         String md5Pwd = Encrypt.md5(new String(upToken.getPassword()), upToken.getUsername());           // 获取数据库中的加密密码         String pwd = (String) info.getCredentials();           // 返回比较结果         return this.equals(md5Pwd, pwd);     }   } Encrypt是一个进行MD5加密的工具类 Encrypt.java public class Encrypt {     public static String md5(String password, String salt) {         return new Md5Hash(password, salt, 2).toString();     } }
  7. 编写自定义的realmAuthRealm.java public class AuthRealm extends AuthorizingRealm {       private IUserService userService;       public void setUserService(IUserService userService) {         this.userService = userService;     }       /**      * 授权,当jsp页面遇到shiro标签会执行该方法      */     @Override     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pc) {         System.out.println("授权");         User user = (User) pc.fromRealm(this.getName()).iterator().next();  // 根据realm名字找到对应的realm           List permissions = new ArrayList();           Set roles = user.getRoles();         for (Role role : roles) {             Set modules = role.getModules();             for (Module module : modules) {                 permissions.add(module.getName());             }         }           SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();         info.addStringPermissions(permissions);     // 添加用户的权限           return info;     }       /**      * 认证      */     @Override     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {         System.out.println("认证");         UsernamePasswordToken upToken = (UsernamePasswordToken) token;           List list = userService.find("from User u where u.userName = ?", User.class, new String[]{upToken.getUsername()});           if (list != null && list.size() > 0) {             User user = list.get(0);             AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());             return info;         }           return null;    // 返回null抛出异常     }   }
  8. 登录操作try {     // 1、得到Subject     Subject subject = SecurityUtils.getSubject();       // 2、调用登录方法---AuthRealm#doGetAuthenticationInfo()     subject.login(new UsernamePasswordToken(username, password));       // 3、登录成功     User user = (User) subject.getPrincipal();       // 4、放入session     session.put(SysConstant.CURRENT_USER_INFO, user); } catch (Exception e) {     e.printStackTrace();     request.put("errorInfo", "用户名或密码错误!");     return "login"; }   return SUCCESS;
  在Shiro框架中,如果登陆失败,则会抛出异常,所有在使用Subject的代码外要使用try-catch,当捕获异常,表示用户身份验证失败。
  以上就是Shiro安全框架的基本介绍,推荐看动力节点的Shiro入门教程自学的,非常详细,适合初学者
  Shiro教程-Apache Shiro安全框架实战
  https://www.bilibili.com/video/BV14T4y1g75M
  Shiro资料下载
  http://www.bjpowernode.com/?toutiao

安卓14获得官方内部代号翻转蛋糕谷歌公布了安卓14的官方代号,内部称2023年发布的安卓14为翻转蛋糕每年,谷歌都会在其最新发布的主要安卓系统中,以甜点为主题,按字母顺序排列一个有趣的代号。过去,这些代码名也是每游戏版号恢复行业动态及创梦天地(01119)公司前景展望电话会议实录智通财经APP获悉,创梦天地(01119)于2022年4月12日20002100举行游戏版号恢复行业动态及创梦天地公司前景展望电话会议。创梦天地副总裁王习先生出席会议。以下为会议实两部门发文加强游戏直播监管本报记者陈溢波吴可仲北京报道4月15日,国家广播电视总局官网披露关于加强网络视听节目平台游戏直播管理的通知(以下简称通知)。该通知由国家广播电视总局网络视听节目管理司中共中央宣传部中华鲎救人无数唯一的蓝色血液生物它曾经是被人类选中的血奴,鲎,世界上最古老的生物之一,经历了5次生物大灭绝然而却差点灭绝在人类手中,为了获得进化了4亿年的稀有蓝血人类将它的身体对折,用针刺入心脏抽血1955年科学大疆无人机幕后功臣朱晓蕊,被雷军领投24亿,离职后创百亿独角兽近几年我国的新能源领域十分火热,有不少资本加速进入了新能源的赛道,2021年新能源汽车的融资规模达到了3639亿元,在短短一年的时间里,新能源汽车融资金额的规模扩大了三倍多,新能源元宇宙可能会颠覆直播行业,重塑虚拟世界业态直播拥有重要的创新工具人工智能增强现实和虚拟现实,它们是虚拟世界的基础。Metaverse是近来的热门话题。每个人似乎都对这个概念着迷,不难说每个人都会享受独一无二的虚拟体验。但在独家斗鱼虎牙裁员30,游戏直播没有赢家?来源Tech星球文耐耐编辑杨晓鹤近期,游戏直播领域状况频出。前有企鹅电竞官宣将于6月7日停止运行,后有B站直播业务传出大裁员的消息。而在游戏直播行业遇冷后,头部的虎牙斗鱼也没能独善美团上线直播助手App36氪获悉,美团于近日上线了美团直播助手产品。该产品是美团官方为商家和达人提供的免费开播工具,主播可以通过App随时开播。天眼查App显示,美团直播助手iOS及Android版本软索尼推出PlaystationPlus订阅服务五月底上线4月23日消息,索尼昨晚正式宣布,此前公开的PlaystationPlus订阅服务即将从5月23日起上线,将分批在不同市场推出。据介绍,PlaystationPlus订阅服务将现在快手上线世界读书日活动我在快手读人间北京商报讯(记者魏蔚)4月23日是世界读书日,快手推出我在快手读人间活动,用户只要在快手搜索关键词读人间,即可进入活动主会场。从4月23日4月30日,每天都会有刘震云俞敏洪等各行业领英职场助求职者多点连接数实融合下的职业新机遇中国发展网讯数字技术与传统实体经济的加速融合,正在改变传统的组织架构和工作模式,而以智能制造金融科技和新消费等融合性行业为代表的新兴领域,对数字人才的吸引力在不断增强。领英近日发布
比亚迪6月产销快报公布,订单车主发问产能什么时候才能跟上?相较于仍纠结在刹车门事件的美系新能源品牌,比亚迪在上半年内屡屡曝出半导体拆分上市获批海豚正式亮相DMi销售火爆百万辆纯电动车型下线等利好消息,也为比亚迪在资本市场也带来涨幅较高的提续航525公里,售价27。6万元,ModelY标准续航版上市虽然近期特斯拉刹车门引发的风波尚未停息,但从销量数据来看特斯拉旗下车型并没有受到太大影响,特别是特斯拉ModelY自上市以来销量一路走高,在国内市场的销量已经逐步超越Model3。ModelY推出标准续航版换装磷酸铁锂电池价格下探到27。6万最近特斯拉是风口浪尖上的风云人物,但这并没有打乱它的步伐。在近日,又针对ModelY车型推出标准续航版车型,共一款车型,它的续航里程可以达到525公里,并使用了磷酸铁锂电池,预计会突发特斯拉ModelSPlaid自燃车主持有11亿美元特斯拉股票特斯拉ModelSPlaid自燃近日,美国宾夕法尼亚州一辆刚刚交付的特斯拉ModelSPlaid自燃起火。车主表示,当时自己就坐在驾驶位,发现车尾冒烟后,他多次尝试解锁车门,但似乎老年人有必要戴助听器吗?为什么?老年聋常表现为听力下降(耳背)听力渐进性下降,或由于重病麻醉等原因听力突然下降能听见声音,但不知道在说什么辨别方向的能力下降60的耳背老人还伴有耳鸣。日常生活中,老年人的听力问题常纠结了很久,市区代步还是新能源汽车好,这3款动力强劲续航也长现在国内车市堪称百花齐放,消费者也深陷选择困难症,不知该如何下手。对于市区代步车而言,很多朋友都在传统油车和新能源车型之间纠结,导致购车计划一拖再拖,迟迟没有答案。不过在续航问题得车市半年报同增235新能源车从绿叶变红花封面天天见封火轮在激增这个关键词下,中国车市划下了今年中场的句号。7月6日,公安部发布最新数据,2021年上半年,全国新注册登记机动车1871万辆,与去年同期相比增加457万辆登记新能源汽车1107月9日开售!拥有人间绝绝紫的Reno6值不值得买?一文看懂作为OPPOReno系列的最新一代产品,Reno6系列自上市之初,就被寄予了厚望,而从销量数据来看,OPPOReno6系列也确实不负众望。首销当日就斩获了全网全价位段销量销售额双冠人间绝绝紫!Reno6新配色官宣,张子枫最爱的颜色会是你的菜?不难发现只有太多手机颜色匹配,现在只有两种颜色的两种颜色。像红色,绿色,黄色等一样,全部使整个手机看起来更精力充沛。今年,苹果,三星,这两个大植物,没有泥炭进入手机的新颜色,这证明小米11Ultra拍照如何?三个月使用者的无恰饭纯独立评价号称打响手机与相机拐点之战的小米11Ultra,在拍照方面的表现是否对得起这句豪迈的口号呢?这或许是很多想购买这款手机,但又未亲自使用过小米11Ultra的人心里最大的顾虑了。小米俞永福,不是阿里的张小龙本文转自媒体壹番财经作者太史詹姆斯还沉浸在高德经济特区去年美妙业绩当中的俞永福可能畅想过他会被老板委以重任,但没想到会来的这么快。7月2日,阿里高管会宣布由他执掌基于地理位置服务管