nicdark_icon_close_navigation

Spring Boot整合Shiro展开职权证书管理工作

Spring Boot整合Shiro展开职权证书管理工作

Shiro的基本功能点如图:

Authorization用来展开职权验证,展开验证已经身份证书的使用者是否具有某个职权,验证该使用者对于某个资源是否具有相关职权。

酷骑单车随后发布公告称,拜客科技将代替运营酷骑单车的管理工作和运维工作,但不还包括债务。北京的办公室将暂停办理押金退还业务,使用者退押金都要去位于成都的公司办理,如果不方便去成都,则需要联系公布的三个退还押金专线电话。但记者多次拨打均为占线。

Session Manager:不会话管理工作,即使用者登录后就是一次不会话,在没有退出之前,它的所有数据都在不会话中;不会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的;

Cryptography用来展开对数据加密,例如对密码加密存储文档。

不难发现,共享单车高频补贴的背后有资产的力量。因为即便在公认资产寒冬的当下,共享单车依然受到投资方的青睐。公开资料显示,步入2017年仅两个多月时间内,多家共享单车企业已完成新一轮投资消息传出。

Caching用来提供缓存功能。

1日,ofo宣布已完成D轮4.5亿美元投资,DST领投,滴滴等多家机构跟投。2月28日,共享单车平台“永安行”宣布已完成A轮投资,虽未透露投资规模,但投资者还包括蚂蚁金服、IDG资产等知名机构。2月20日,摩拜单车宣布再次获得D轮后新投资,自今年1月初至今,摩拜单车累计投资额已超过3亿美元。

值得注意的是,共享单车行业中不乏网络巨头的身影。2016年10月份,当时摩拜单车确认了新一轮投资,其中投资方就还包括腾讯。2月底,摩拜和腾讯又联合宣布,今后使用者通过微信“扫一扫”扫描摩拜单车车身上的二维码,就可直接解锁骑走摩拜单车。

腾讯公司董事不会主席兼首席执行官马化腾最近表示,现在有些共享单车已经从付费往免费方面走了,后续不会不不会倒贴钱让使用者去骑单车?行业不会怎么演变呢?那时候不会再发生什么事情呢?这是他比较关注的一个问题。

二、Shiro主体架构

Shiro 不不会去维护使用者、维护职权;这些需要我们自己去设计 / 提供;然后通过相应的接口注入给 Shiro 即可。

酷骑单车曾称在民生银行设置了“专门账户”。但据民生银行北京分行透露,酷骑单车在民生银行开立的只是一般存款账户,银行“并未与该公司开展任何实质业务合作”。

Shiro是一个强大而灵活的开源安全性框架,能够非常清晰的处理证书、授权、管理工作不会话以及密码加密。它的优点如下:

中国电子商务研究中心主任曹磊认为,站在网络的角度,盈利不能只看C端使用者,未来共享单车一方面可以从使用者押金、租金等方面获取盈利;另一方面,还可以依靠其延伸服务获取利润,还包括沉淀资金的投资等。除了这两方面,所获得的使用者数据更是无价的。

SecurityManager是安全性管理工作器,所有跟安全性相关的操作都不会与SecurityManager交互,管理工作着所有的Subject;SecurityManager是Shiro的核心,与所有的其他组件展开交互,可以类比于Spring MVC中的DispatcherServlet;

Realm表示域,提供对Shiro中的安全性数据(如使用者、角色、职权),Realm为SecurityManager的使用者身份证书提供使用者比较;Realm也可以提供使用者相应的角色/职权来验证使用者能否展开操作;Realm可以比作安全性数据源DataSource,对于我们而言:

共享单车未来的发展或也任重道远,因为这个市场还有竞争者在不断地涌入。近日,国家数据中心和中国网络协不会分享经济工作委员不会联合发布的报告显示,目前市场上已经有几十家共享单车平台涌现。未来竞争程度可见一斑。

1.应用字符通过Subject展开证书和授权,Subject又委托给SecurityManager;

(本文转载自中新网 编辑邮箱:shguancha@sina.com)题图来源:视觉中国 图片编辑:朱瓅

北京大学继续教育学院院长、中国信用研究中心主任章政认为,共享经济依然大有可为,但破题的核心在于信用建设。

1.首先准备使用者的一些身份/凭据(shiro.ini):

对于一个好的框架,从外部来看应该具有非常简单易于使用的 API,且 API 契约明确;从应用程序角度的来观察如何使用 Shiro 已完成工作。如下图:

2.测试用例证书功能核心字符:

Subject:主体,代表了当前 使用者 ,这个使用者不一定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等;即一个抽象概念;所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都不会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;

也就是说对于我们而言,最简单的一个 Shiro 应用,应用字符通过 Subject 来展开证书和授权,而 Subject 又委托给 SecurityManager;我们需要给 Shiro 的 SecurityManager 注入 Realm,从而让 SecurityManager 能得到合法的使用者及其职权展开判断。

SecurityManager:相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心脏;所有具体的交互都通过 SecurityManager 展开控制;它管理工作着所有 Subject、且负责展开证书和授权、及不会话、缓存的管理工作。

如果验证成功,将返回 AuthenticationInfo 验证数据;此数据中包含了身份及凭证;如果验证失败将抛出相应的 AuthenticationException 构建。

四、上手指南

在Spring Boot工程里面引入以下Maven依赖,来引入Shiro:

引入的关键点是shiro-spring坐标,通过为Spring Boot工程加入Shiro功能。

SessionDAO:DAO 大家都用过,数据访问对象,用于不会话的 CRUD,比如我们想把 Session 保存到文档,那么可以构建自己的 SessionDAO,通过如 JDBC 写到文档;比如想把 Session 放到 Memcached 中,可以构建自己的 Memcached SessionDAO;另外 SessionDAO 中可以使用 Cache 展开缓存,以提高性能;

Thymeleaf来加入前端页面:

五、准备文档文件

文档表结构为:

使用者数据:

使用者职权:

标签类用于Web页面

对应JPA实体类:

本文来自投稿,不代表本人立场,如若转载,请注明出处:https://027whxyk.com/article/1602743.html

角色数据SysRole:

六、Shiro在Spring Boot项目中的Config配置

配置DataSource:

配置entityManagerFactory,并设置JPA扫描:

Apache Shiro 核心通过 Filter 来构建,就好像 SpringMvc 通过 DispachServlet 来主控制一样。 既然是使用 Filter 一般也就能猜到,是通过 URL 规则来展开过滤和职权校验,所以我们需要定义一系列关于 URL 的规则和访问职权。

@Bean

public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {

ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager);

//拦截器.

Map filterChainDefinitionMap = new LinkedHashMap();

// 配置不不会被拦截的链接 顺序判断 filterChainDefinitionMap.put( /static/** , anon ); //配置退出 过滤器,其中的具体的退出字符Shiro已经替我们构建了 filterChainDefinitionMap.put( /logout , logout );

//:这是一个坑呢,一不小心字符就不好使了; // filterChainDefinitionMap.put( /** , authc ); // 如果不设置默认不会自动寻找Web工程根目录下的 /login.jsp 页面

myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());

return myShiroRealm;

public SecurityManager securityManager(){

return securityManager;

该方法主要执行以下操作:

而在我们的应用程序中要做的就是自定义一个 Realm 类,继承AuthorizingRealm 抽象类,重载 doGetAuthenticationInfo(),重写获取使用者数据的方法。

MyShiroRealm完整字符如下:

身份证书主要方法:

使用者数据Service层:

使用者数据Controller层:

使用者登录构建核心字符:

@RequestMapping( /login )

throws Exception{

System.out.println( exception= + exception);

msg = UnknownAccountException — > 账号不存在: ; }

{ System.out.println( IncorrectCredentialsException — > 密码不正确: );

} else if ( kaptchaValidateFailed .equals(exception)) {

System.out.println( kaptchaValidateFailed — > 验证码错误 );

System.out.println( else — > + exception);

}

map.put( msg , msg); // 此方法不处理登录成功,由shiro展开处理

}

HomeController完整字符如下:

八、测试

。登录之后就不会跳转到 index 页面,登录后,直接在浏览器中输入http://localhost:8480/userInfo/userList访问就不会看到使用者数据。上面这些操作时候触发MyShiroRealm.doGetAuthenticationInfo()这个方法,也就是登录证书的方法。

Categories :