shiro学习 一

shiro--安全框架,能够托管权限,但是权限需要自己实现。

下面是配置过程。

1.

1.1首先在web.xml中声明一个shiroFilter,在spring的项目中,可以通过spring提供的DelegatingFilterProxy当一个bean加载到spring容器中。当然了,看名字就知道这玩意是个委托代理。

1.2然后这个过滤器还需要跟spring MVC一样,设置一下需要加入安全策略拦截的url。具体的话,仿照mvc的路子,默认拦截所有的就行了,所以这里的url-pattern这里放入/*就行了。

example:

<!-- shiro 安全过滤器 --><filter>    <filter-name>shiroFilter</filter-name>    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>    <!--<async-supported>true</async-supported>-->    <init-param>        <param-name>targetFilterLifecycle</param-name>        <param-value>true</param-value>    </init-param></filter>

<filter-mapping>    <filter-name>shiroFilter</filter-name>    <url-pattern>/*</url-pattern>    <dispatcher>REQUEST</dispatcher></filter-mapping>

2.定义shiro的核心 shiroFilter

现在,需要在spring容器中,定义一下这个shiroFilter这个bean。当然了,这些复杂对象一般就是用工厂模式生产。这个bean中涉及到了:

 securityManager:类似于MVC的dispatch,shiro的核心实现,定义了login,logout,creatSubject的接口。其中login的时候,会通过Authenticator认证,Authrizer授权。
 Map<String, Filter>  filters:filter的容器,里面定义了所有在shiro里被注册过滤器。用来解释过滤器连中的过滤器。
 Map<String, String>  filterChainDefinitionMap:filterChain的容器,里面定义了所有在shiro里被注册过的拦截器链。
   另外shiro框架中,先走Shiro 自己的 Filter 体系,然后才会委托给 Servlet 容器的 FilterChain 进行 Servlet 容器级别的Filter 链执行
 String  loginUrl:登录默认跳转界面
 String successUrl :登录成功默认跳转界面
 String unauthorizedUrl:未经授权默认跳转页面
 
example:
 
<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">    <property name="securityManager" ref="securityManager"/>    <property name="loginUrl" value="/login"/>    <property name="filters">        <util:map>            <entry key="authc" value-ref="formAuthenticationFilter"/>            <entry key="sysUser" value-ref="sysUserFilter"/>        </util:map>    </property>    <property name="filterChainDefinitions">        <value>            /login = authc            /logout = logout            /authenticated = authc            /** = user,sysUser        </value>    </property></bean>
<!--ps: filterChainDefinitions中,是成对出现的,前面是要拦截的地址,后面的是拦截器链,有先后顺序。其中authc是shiro自己提供的是否认证的拦截器,还有user、logout等,详细看下图—>
 
<!-- 安全管理器 --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">    <property name="realm" ref="userRealm"/>    <property name="sessionManager" ref="sessionManager"/>    <!--<property name="cacheManager" ref="cacheManager"/>-->    <property name="rememberMeManager" ref="rememberMeManager"/></bean>
 

3.配置securityManager,安全管理器:在上述配置中,涉及到了一个securityManager,类似于MVC的dispatch,shiro的核心实现,定义了login,logout,creatSubject的接口。其中login的时候,会通过Authenticator认证,Authrizer授权。

里面涉及到一下内容:

realm配置: 类似于shiro的安全数据源,下面会有详细介绍
sessionManager配置:非必要,后面补
cacheManager配置:非必要,后面补
rememberMeManager配置:非必要,后面补
example:

<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="userRealm"/>
<property name="sessionManager" ref="sessionManager"/>
<!--<property name="cacheManager" ref="cacheManager"/>-->
<property name="rememberMeManager" ref="rememberMeManager"/>
</bean>

 

4.配置realm:Shiro从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager要验证用户身份, 那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色/权限进行验证用户是否能进行操作; 可以把 Realm 看成 DataSource , 即安全数据源。

里面涉及到以下内容:

credentialsMatcher
cachingEnabled
authenticationCachingEnabled
authenticationCacheName
authorizationCachingEnabled
authorizationCacheName
时间: 2024-08-25 14:36:06

shiro学习 一的相关文章

shiro学习笔记_0600_自定义realm实现授权

博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 保存到了数据库中.所以需要从数据库中去获取相关的数据信息.可以使用 shiro 提供的JdbcRealm来实现,,也可以自定义realm来实现.使用jdbcRealm往往也不够灵活.所以在实际应用中大多数情况都是自定义Realm来实现. 2,自定义Realm 需要继承 AuthorizingRea

Apache Shiro学习笔记(六)FilterChain

鲁春利的工作笔记,好记性不如烂笔头 Apache Shiro学习笔记(七)IniWebEnvironment

Shiro学习笔记(5)——web集成

Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在普通web项目和spring项目中的配置是不一样的.关于spring-shiro集成,能够參考Shiro学习笔记(3)--授权(Authorization) 中的JSP标签授权部分演示样例代码 本次介绍普通的web项目,不使用不论什么框架. shiro配置文件(shiro.ini) 创建web项目.

Shiro学习笔记(2)——身份验证之Realm

环境准备 什么是Realm 为什么要用Realm 自定义Realm 多个Realm 配置Authenticator和AuthenticationStrategy 自定义AuthenticationStrategy验证策略 多个Realm验证顺序 环境准备 创建java工程 需要的jar包 大家也可以使用maven,参考官网 什么是Realm 在我所看的学习资料中,关于Realm的定义,写了整整一长串,但是对于初学者来说,看定义实在是太头疼了. 对于什么是Realm,我使用过之后,个人总结一下:s

Shiro学习笔记(3)——授权(Authorization)

什么是授权 授权三要素 Shiro的三种授权方式 1 编码方式授权 2 基于注解的授权 3 JSP标签授权 1.什么是授权 授权,就是访问控制,控制某个用户在应用程序中是否有权限做某件事 2.授权三要素 权限 请看Shiro学习笔记(1)--shiro入门中权限部分内容 角色 通常代表一组行为或职责.这些行为演化为你在一个软件应用中能或者不能做的事情.角色通常是分配给用户帐户的,因此,通过分配,用户能够"做"的事情可以归属于各种角色 隐式角色:一个角色代表着一系列的操作,当需要对某一操

Shiro学习笔记(4)——ini 配置

ini 配置文件 在前面三个笔记中也有使用到ini配置文件,但是没有进行详细的解析,本次来介绍一下如何配置. ini配置文件其实和properties配置文件一样的使用方法,都是键值对的形式(key=value),#号代表注释 ini配置中主要配置有四大类:main,users,roles,urls [main] #提供了对根对象 securityManager 及其依赖的配置 securityManager=org.apache.shiro.mgt.DefaultSecurityManager

Spring shiro学习(一)

先转一下开涛大神的shiro基础,讲的很好 1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了.对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了. 本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用. Shiro可以非常容易的

shiro学习笔记_0100_shiro简介

前言:第一次知道shiro是2016年夏天,做项目时候我要写springmvc的拦截器,申哥看到后,说这个不安全,就给我捣鼓了shiro,我就看了下,从此认识了shiro.此笔记是根据网上的视频教程记录的,shiro的文档感觉不是很好,所以结合老师的讲课和文档,感觉条理更清晰些.以便日后查阅 shiro:Shiro是一个基于java的开源的安全管理框架. Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等可用于javase和javaee,还可用于分布式集群环境. 在ja

shiro学习中报错解决方法

[1] 最近在学习shiro,在学习过程中出现了一个问题,报错如下: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code,either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.  This is an invalid applic

Apache Shiro 学习笔记

一.为什么要学习Shiro Shiro是简单易用的权限控制框架.应用范围广,受到许多开发人员的欢迎.他可以运用于javaSE项目还可以运用于javaEE项目.在项目中Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. 二.与spring security的笔记 Shiro简单易学,尽管功能没有spring security强大,但其功能已足够日常开发使用.spring官网使用的便是Shiro.可见其的方便.Shiro还可与spring整合.更方便了开发者. 三.Shi