shiro的基本认识

时间:2022-10-19 18:21:31

Shiso

1、Shiro的简介

11Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。

本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用。

 2shiro的作用:

2.1Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等

3、运行机制

Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

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

Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

Web Support:Web支持,可以非常容易的集成到Web环境;

Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;

Testing:提供测试支持;

Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

二、主要核心内容:

Name

Description

Realm

数据安全中心,即保存用户名密码的地方,可以是文件,可以是数据库,LDAP 等,Reaml 就是一个特定的安全 DAO,它为 Shiro 提供所需的数据

Subject

描述当前用户,User 这个词通常隐含的指一个人,但是 Subject 可以是一个人也可以代表第三方服务,守护账户,定时作业,或者其他类似的与软件交互的事物。

SecurityManager

所有 Subject 实例都与一个 SecurityManager 绑定,当你和一个 Subject 交互时,所有交互都会通过 SecurityManager 转换为特定 Subject 的交互。SecurityManager 及其内贸部对象图一旦被应用配置,它基本上就被放在一边不再被程序员使用了, 开发人员基本上总是在与 Subject 的相关 API 打交道。它在幕后支持 Subject 的安全操作。

Principal

简单的理解为用户名

Cridential

简单的理解为密码

 

Shiro [urls]规则

Name

Description

/index.html = anon

目录下的 index.html 可以匿名访问

/user/** = authc

user 目录下的所有资源都需要经过认证后才可访问

/admin/** = authc, roles[administrator]

admin 目录下的所有资源必须经过认证,并且需要管理员角色才能访问

 

Shiro的优点和缺点 

(一) FreeMarker的优点 
1、简单易懂,开源框架。

2.可以实现, 认证、授权、加密、会话管理、与Web集成、缓存

00001. 简单性,Shiro 在使用上较 Spring Security 更简单,更容易理解。

00002. 灵活性,Shiro 可运行在 Web、EJB、IoC、Google App Engine 等任何应用环境,却不依赖这些环境。而 Spring Security 只能与 Spring 一起集成使用。

Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:

· 易于理解的 Java Security API;

· 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);

· 对角色的简单的签权(访问控制),支持细粒度的签权;

· 支持一级缓存,以提升应用程序的性能;

· 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;

· 异构客户端会话访问;

· 非常简单的加密 API;

· 不跟任何的框架或者容器捆绑,可以独立运行。

3.

三、缓存利用Cache防止同一帐号重复登录

需求概要 
对于B/S应用系统中客户经常会提出同一帐号不能重复登录的需求,就是说,用某一帐号登录系统后,在系统不超时的情况下,任何人都不能再用目前已登录的帐号登录系统。包括我目前的项目中同样有这一需求。 
其实要实现这个功能也不难,方法也有多种,比如用数据库来记录用户登录情况、用Application来保存用户登录信息、用Cache来保存信息等等。现在我们就来讨论一下如何利用缓存Cache方便地实现此功能。


解决方法 
我们都知道Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户;而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息。


我们只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache[用户名]是否有值,如果没有值,证明该用户没有登录,否则该用户已登录。

3、