shiro

【二】shiro入门 之 身份验证

邮差的信 提交于 2020-03-02 17:16:24
大体步骤如下: 1.首先通过new IniSecurityManagerFactory 并指定一个ini 配置文件来创建一个SecurityManager工厂; 2.接着获取SecurityManager并绑定到SecurityUtils,这是一个全局设置,设置一次即可; 3、通过SecurityUtils得到Subject,其会自动绑定到当前线程;如果在web环境在请求结束时需要解除绑定;然后获取身份验证的Token,如用户名/密码; 4、调用subject.login 方法进行登录,其会自动委托给SecurityManager.login方法进行登录; 5、如果身份验证失败请捕获AuthenticationException 或其子类,常见的如: DisabledAccountException(禁用的帐号)、LockedAccountException(锁定的帐号)、 UnknownAccountException(错误的帐号)、ExcessiveAttemptsException(登录失败次数过 多)、IncorrectCredentialsException (错误的凭证)、ExpiredCredentialsException(过期的 凭证)等,具体请查看其继承关系;对于页面的错误消息展示,最好使用如“用户名/密码 错误”而不是“用户名错误”/“密码错误”

跟开涛老师学shiro -- 身份验证

穿精又带淫゛_ 提交于 2020-03-02 17:15:50
身份验证 ,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份: principals :身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。 credentials :证明/凭证,即只有主体知道的安全值,如密码/数字证书等。 最常见的principals和credentials组合就是用户名/密码了(对,就是这句话,身份验证说到最后,还是这个公式 user.password == login.password) 。接下来先进行一个基本的身份认证。 另外两个相关的概念是之前提到的 Subject 及 Realm ,分别是主体及验证主体的数据源。 2.2 环境准备 本文使用Maven构建,因此需要一点Maven知识。首先准备环境依赖: Java代码 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version>

Shiro身份验证

送分小仙女□ 提交于 2020-03-02 17:15:14
身份验证 :一般需要提供如身份ID 等一些标识信息来表明登录者的身份,如提供email, 用户名/密码 来证明。 在shiro中,用户需要提供 principals (身份)和credentials(证明) 给shiro,从而应用能验证用户身份: principals :身份,即 主体的标识属性 ,可以是任何属性,如 用户名、邮箱等,唯一 即可。一个主体可以有多个principals, 但只有一个Primary principals ,一般是用户名/邮箱/手机号。 credentials : 证明/凭证 ,即只有主体知道的安全值,如密码/数字证书等。 最常见的principals 和credentials 组合就是 用户名/密码 了 身份验证基本流程 1、 收集 用户身份/凭证,即如 用户名/密码 2、 调用Subject.login进行登录 ,如果失败将得到相应的AuthenticationException异常,根据异常提示用户错误信息;否则登录成功 3、 创建自定义的Realm 类,继承org.apache.shiro.realm.AuthorizingRealm类,实现doGetAuthenticationInfo() 方法 身份验证示例 AuthenticationException 如果身份验证失败请捕获AuthenticationException或其子类 最好使用如

Shiro

半世苍凉 提交于 2020-03-02 17:14:36
1.Shiro 默认提供的 Realm 以后一般继承AuthorizingRealm(授权)即可;其继承了AuthenticatingRealm(即身份验证),而且也间接继承了CachingRealm(带有缓存实现)。其中主要默认实现如下: org.apache.shiro.realm.text.IniRealm : [users]部分指定用户名/密码及其角色;[roles]部分指定角色即权限信息; org.apache.shiro.realm.text.PropertiesRealm : user.username=password,role1,role2指定用户名/密码及其角色;role.role1=permission1,permission2指定角色及权限信息; org.apache.shiro.realm.jdbc.JdbcRealm : 通过sql查询相应的信息,如“select password from users where username = ?”获取用户密码,“select password, password_salt from users where username = ?”获取用户密码及盐;“select role_name from user_roles where username = ?”获取用户角色;“select permission

DelegatingFilterProxy详解

早过忘川 提交于 2020-03-02 17:14:31
全文内容转载至 spring DelegatingFilterProxy,targetFilterLifecycle的作用 ,我重新整理一下文章的结构 今天在看SHIRO的时候,看到佟刚老师用了DelegatingFilterProxy类,并使用了targetFilterLifecycle和targetBeanName属性,到网上找到了GOODDEEP先生的文章,受用很大。 概要: DelegatingFilterProxy类不是针对SHIRO出现的,是SHIRO的org.apache.shiro.spring.web.ShiroFilterFactoryBean 使用到了SPRING这个类提供功能。这个类使SPRING容器中的BEAN可以在WEB.XML中配置为FILTER,并生效。这样一来及起到了过滤URL请求作用,又可以访问SPRING容器中其他的BEAN提供的丰富功能。 详情: 使用两种配置比较说明DelegatingFilterProxy配置的区别: 配置一: 在web.xml中增加如下内容: <filter> <filter-name>permissionFilter</filter-name> <filter-class>com.taobao.riskm.filter.PermissionFilter</filter-class> </filter> <filter

shiro学习

删除回忆录丶 提交于 2020-03-02 17:14:23
1. shiro 介绍 1.1 什么是 shiro Apache Shiro 是 Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。 1.2 为什么要学 shiro 既然 shiro 将安全认证相关的功能抽取出来组成一个框架,使用 shiro 就可以非常快速的完成认证、授权等功能的开发,降低系统成本。 shiro 使用广泛,shiro 可以运行在 web 应用,非 web 应用,集群分布式应用中越来越多的用户开始使用 shiro。 java 领域中spring security(原名Acegi)也是一个开源的权限管理框架,但是 spring security 依赖 spring 运行,而 shiro 就相对独立,最主要是因为 shiro 使用简单、灵活,所以现在越来越多的用户选择 shiro。 1.3 基本功能 1.3.1 Authentication 身份认证/登录,验证用户是不是拥有相应的身份; 1.3.2 Authorization 授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用 户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用 户对某个资源是否具有某个权限

java开源安全框架-------Apache Shiro--第二天

自古美人都是妖i 提交于 2020-03-02 17:13:53
身份验证    即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标志信息来表明他就是他本人,如提供身份证、用户名、密码来证明   在shiro中,用户需要提供principals(身份)和credentials(证明)给Shiro,从而应用能验证用户身份;   principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可,一个主体可以有多个principals,但是只能有一个Primary Principals,一般是用户名、密码/手机号   credentials:证明/凭证 ,即只有主体知道的安全值,如密码/数字证书等等   最常见的Principals和Crendentials组合就是用户名/密码组合了。接下来进行一个基本的身份验证   另外两个相关的概念就是之前提到的Subject和Realm,分别是主体和验证主体的数据源   一、环境准备   本文使用Maven构建,因此需要一点Maven知识,首先准备Maven环境依赖   添加junit、common-logging及shiro-core依赖即可。    二、登录、退出   1、首先准备一些用户/身份凭据(shiro.ini) 此处使用ini配置文件,通过users指定两个主体zhang/123 wang/123   2、测试用例(com.github.zhangkaitao

(二)Shiro身份验证

不羁岁月 提交于 2020-03-02 17:13:23
身份验证 ,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份: principals :身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。 credentials :证明/凭证,即只有主体知道的安全值,如密码/数字证书等。 注:最常见的principals和credentials组合:用户名/密码。 Subject:主体。 Realm :主体的数据源。 2.2 环境准备 本文使用Maven构建,因此需要一点Maven知识。首先准备环境依赖: pom.xml 添加依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging<

Spring与Shiro整合源码分析

拈花ヽ惹草 提交于 2020-03-02 16:38:45
Spring与Shiro整合是通过在web.xml里面配置过滤器: <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFileterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> 然后我们在apllicationContext.xml里面配置如下的ShiroFilterFactoryBean就可以了 <!-- Shiro 的Web过滤器 -->

DelegatingFilterProxy的作用与用法

风格不统一 提交于 2020-03-02 14:28:08
一、类结构   DelegatingFilterProxy类存在与spring-web包中,其作用就是一个filter的代理,用这个类的好处是可以通过spring容器来管理filter的生命周期,还有就是,可以通过spring注入的形式,来代理一个filter执行,如shiro,下面会说到;有上图我们可以看到,DelegatingFilterProxy类继承GenericFilterBean,间接实现了Filter这个接口,故而该类属于一个过滤器。那么就会有实现Filter中init、doFilter、destroy三个方法。 二、代理具体实现   首先我们看init方法,我们知道当filter初始化时会执行init方法,从源码中我们可以找到具体代码,该方法在GenericFilterBean类中实现,具体功能是,将该类封装成spring特有形式的类,方便spring维护,并且调用initFilterBean方法,该方法放在子类(DelegatingFilterProxy)实现,该方法主要目的是,找到在spring中维护的目标filter,具体实现看下面代码: /** * Standard way of initializing this filter. * Map config parameters onto bean properties of this filter, and