文档章节

shiro配置记录(认证篇)

EasyProgramming
 EasyProgramming
发布于 2016/12/09 20:48
字数 927
阅读 67
收藏 0
点赞 0
评论 0

 

    最近博客很久没搞了,这几天开始搞起来。。。。

    这段时间在学习shiro权限框架,我是以张开涛老师的博客为主,孔浩老师的视频为辅来学习的,无奈孔浩老师的视频出的有点让人捉急,后半段要靠自己了,所以把自己的shiro的学习记录和一些坑记录下来~~~

    坑1:

            自定义的permissionResovler的配置应该是配置在realm里面的(这里的permissionResovler应该不是全局的)

      完整的认证配置如下:

​
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
	       http://www.springframework.org/schema/beans/spring-beans.xsd
	       http://www.springframework.org/schema/context
	       http://www.springframework.org/schema/context/spring-context.xsd
	       http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd
	       http://www.springframework.org/schema/aop
	       http://www.springframework.org/schema/aop/spring-aop.xsd">
	 
	<bean id="urlPermissionResolver" class="com.EP.permission.UrlPermissionResovler"/>

	<!-- 凭证匹配器 -->
	<bean id="hashMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
	 	<property name="hashAlgorithmName" value="md5"/>
	</bean>

	<bean id="adminRealm" class="com.EP.realm.AdminRealm">
	 	<property name="credentialsMatcher" ref="hashMatcher"/>
		<property name="PermissionResolver" ref="urlPermissionResolver"/>
	</bean>

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

	<!-- &lt;!&ndash;自定义审核权限的filter &ndash;&gt;
	<bean id="resourceCheckFilter" class="com.EP.shiroFilter.ResourceCheckFilter">
		<property name="errorUrl" value="/common.jsp"/>
	</bean>-->

	<!-- Shiro的Web过滤器 -->
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
	    <property name="securityManager" ref="securityManager"/>
	    <property name="loginUrl" value="/admin/toLoginPage"/>
	    <!--<property name="successUrl" value="/home.jsp"/>-->
	    <property name="unauthorizedUrl" value="/common.jsp"/>

		<!--<property name="filters">
		<map>
		<entry key="resourceCheckFilter" value-ref="resourceCheckFilter" />
		</map>
		</property>-->

	    <property name="filterChainDefinitions">
	        <value>
				/admin/static/** = anon
				/admin/lib/** = anon
				/admin/temp/** = anon

				/admin/toLoginPage = anon
				/admin/login = anon

				<!--/admin/logout = logout-->
				<!--/bgimg/** = resourceCheckFilter-->
				<!--/message/** = resourceCheckFilter-->

	        	/admin/** = authc

	        </value>
	    </property>
	</bean>

	<!--&lt;!&ndash;开启shiro注解&ndash;&gt;
	<bean id="serviceAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/>
	<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
	    <property name="securityManager" ref="securityManager"/>
	</bean>

	&lt;!&ndash; Shiro生命周期处理器&ndash;&gt;
	<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>-->
</beans>

​

从拦截到登录的一个完整的认证流程:

            1.以当前配置为例,spring实例化shiroFilter后,会对/admin/*的所有url进行拦截(在web.xml中配置)

             2.下面的配置文件为url配置了需要经过的拦截器链:

<value>
                /admin/static/** = anon
                /admin/lib/** = anon
                /admin/temp/** = anon

                /admin/toLoginPage = anon
                /admin/login = anon

                <!--/admin/logout = logout-->
                <!--/bgimg/** = resourceCheckFilter-->
                <!--/message/** = resourceCheckFilter-->

                /admin/** = authc

</value>

            有anon的在经过anon过滤器后会被拦截,有authc的会被要求认证,上面已经配置过拦截器过的url不会被下面的重复定义覆盖。

              3. 如果没有经过验证的url,将会跳转到配置的登录界面,进行登录

               登录(即认证)的流程,这里我引用开涛老师的博客里的流程,顺便加上自己的注释:

                   1、首先调用Subject.login(token)进行登录,其会自动委托给Security Manager,调用之前必须通过SecurityUtils. setSecurityManager()设置(通过IOC把Security Manager注入进去)

                    2、SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;

                    3、Authenticator才是真正的身份验证者,Shiro API中核心的身份认证入口点,此处可以自定义插入自己的实现;

                ”插入自己的实现”的解释:

                SecurityManager接受到token(令牌)信息后会委托内置的Authenticator的实例(通常都是ModularRealmAuthenticator类的实例)调用authenticator.authenticate(token).ModularRealmAuthenticator在认证过程中会对设置的一个或多个Realm实例进行适配,它实际上为Shiro提供了一个可拔插的认证机制。 

                即可以自定义如何对realm进行适配

                    4、Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证,默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证;

                    5、Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个Realm,将按照相应的顺序及策略进行访问。

 

© 著作权归作者所有

共有 人打赏支持
EasyProgramming
粉丝 2
博文 7
码字总数 4909
作品 0
南阳
程序员
Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:《跟我学Shiro》系列教程。但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特...

pangfc ⋅ 2017/01/06 ⋅ 0

Spring+Shiro+CAS整合配置笔记

一、前言 Apache Shiro与Spring Security一样是Java的一个安全框架。那为什么与Spring整合却用Shiro?不要问为什么,任性!开个玩笑:D 其实我个人是认为Spring Security太过于笨重,要写太多...

qllinhongyu ⋅ 2014/12/09 ⋅ 0

springboot(十四):springboot整合shiro-登录认证和权限管理

这篇文章我们来学习如何使用Spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全...

ityouknow ⋅ 2017/06/28 ⋅ 0

springboot(十四):springboot整合shiro-登录认证和权限管理

这篇文章我们来学习如何使用Spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全...

纯洁的虫纸 ⋅ 2017/06/28 ⋅ 0

转:springboot整合shiro-登录认证和权限管理

这篇文章我们来学习如何使用spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全...

芝麻绿豆 ⋅ 2017/07/25 ⋅ 0

【shiro】入门程序

Apache Shiro是一个强大的且易用的java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,可以快速,轻松的获得任何应用程序,从最小的移动应用程序到最大的网络和...

binggetong ⋅ 2017/12/19 ⋅ 0

给JFinal添加Shiro插件功能,支持Shiro所有注解-使用篇

基于JDK1.6打包好的包括源码的Shiro插件在以下地址: http://git.oschina.net/myaniu/jfinalshiroplugin/blob/master/dist/JFinalShiroPlugin-1.0.jar Shiro共有5个注解,分别如下: Requir...

玛雅牛 ⋅ 2013/06/12 ⋅ 42

spring shiro框架的学习记录1

一、shiro的出处: 官方网站:http://shiro.apache.org 相关参考博文: http://my.oschina.net/u/866794/blog/107756 http://www.ibm.com/developerworks/cn/java/j-lo-shiro/ http://hpuzhu......

今夜吴眠 ⋅ 2013/12/06 ⋅ 0

在 Web 项目中应用 Apache Shiro

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资...

冰Jet ⋅ 2013/08/28 ⋅ 0

Shiro权限控制框架入门2:如何将Shiro非入侵地整合到SpringMVC等Web项目中

前言:我在上一篇文章(PS:https://www.zifangsky.cn/770.html)中介绍了shiro框架的一些基本概念以及自定义Realm可以实现的自定义授权和认证的目的。在这一篇文章中我将介绍如何将Shiro与S...

pangfc ⋅ 2017/01/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部