Shiro
What
Apache Shiro旨在成为最全面的,但也是最容易使用的Java安全框架。
文档
没有比官网更好的了 https://shiro.apache.org/get-started.html
简要分析
四大基石: 认证,授权,会话管理,加密
了解术语
Authentication:认证
Authorization:授权(访问控制)
其他:https://shiro.apache.org/terminology.html
架构
Shiro的架构有三个主要概念:Subject,SecurityManager和Realms
其他:https://shiro.apache.org/architecture.html
快速启动
获取当前用户(这里叫主题subject,代之用户,程序,上下文等,不叫user主要是防止shiro不跟其他框架重名) Subject currentUser = SecurityUtils.getSubject(); 获得会话session Session session = currentUser.getSession(); session.setAttribute( "someKey", "aValue" ); 登陆认证 if ( !currentUser.isAuthenticated() ) { //collect user principals and credentials in a gui specific manner //such as username/password html form, X509 certificate, OpenID, etc. //We'll use the username/password example here since it is the most common. //(do you know what movie this is from? ;) UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa"); //this is all you have to do to support 'remember me' (no config - built in!): token.setRememberMe(true); currentUser.login(token); } //或者捕获异常 try { currentUser.login( token ); //if no exception, that's it, we're done! } catch ( UnknownAccountException uae ) { //username wasn't in the system, show them an error message? } catch ( IncorrectCredentialsException ice ) { //password didn't match, try again? } catch ( LockedAccountException lae ) { //account for that username is locked - can't login. Show them a message? } ... more types exceptions to check if you want ... } catch ( AuthenticationException ae ) { //unexpected condition - error? } 获得当前用户主体 currentUser.getPrincipal() //是否有权限 if ( currentUser.hasRole( "schwartz" ) ) { log.info("May the Schwartz be with you!" ); } else { log.info( "Hello, mere mortal." ); } //是否有权限 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."); } // 登出 currentUser.logout(); //removes all identifying information and invalidates their session too.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
架构师的御人之道
一个团队的成员有很多人,其中包括项目经理,架构师,组长,组员等等其他人员。就纯开发而言,编写代码的人员只有架构师和组长、组员三个角色。要完成架构,就要利用好三种角色的关系,并且使用正确的人。架构师的责任是架构,构建出框架的摸样,而架构在实际应用中包含着两个概念:业务和开发。 业务是什么? 业务是架构设计的重要依据,在设计时必须要有一个业务管控的角色和架构师一起进行,而这个业务管控的角色即可以是一个人也可以是多个人。 举个例子,我们在实际开发中经常遇见开发人员说设计不合理,从而产生反感情绪,有甚者拒绝开发。为什么?因为设计违背了开发人员对项目的理解,这些设计指什么?可以是数据库设计,可以是流程设计,也可以是其他。但如果在设计时和对应的业务管控角色一起进行,那么会很大程度的降低这种现象。 开发是什么? 开发就是实际编码,实际编码分为两部分,框架编写和项目实现编写,框架编写时很多人有个误区,框架要由架构师完成。实际上框架编写架构师应该只参与一部分,那么就需要在团队中找到一个技术优秀的人和你一起完成框架,这里就是一个人而不是一个角色了,而之后其他组员的疑问,和框架的扩展就由这位成员来解答和完成...
- 下一篇
聊聊微服务的服务注册与发现
引言 聊起微服务的服务注册与发现,很多人立马就会脱口而出 zk、etcd、consul、eureka 这些组件,进而聊到 CAP 如何取舍,性能如何,高可用和容灾是怎么实现的。 在这之前,站在组件使用者的角度,我想先问这么几个问题: 注册的 IP 和端口怎么确定 ? 实现服务治理还需要注册哪些信息 ? 如何进行优雅的服务注册与服务下线 ? 注册服务的健康检查是如何做的 ? 当服务有节点退出或新的节点加入时,订阅者能不能及时收到通知 ? 我能方便地查看某个应用发布和订阅了哪些服务,以及所订阅的服务有哪些节点吗 ? 看完这些问题后,您也许会发现,对于服务注册与发现,首先应该关注的是服务注册发现本身的功能,然后才是性能和高可用。 一个好的服务注册发现中间件,应该是能完整地满足服务开发和治理的基础功能,然后才是性能和高可用。如果没有想清楚前面的功能,再高的可
相关文章
文章评论
共有0条评论来说两句吧...