spring框架整合shiro

2023-10-27

shiro框架

定义:
Shiro是apache旗下一个开源框架,它将实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。

既然shiro将安全认证相关的功能抽取出来组成一个框架,使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。

shiro使用广泛,shiro可以运行在web应用,非web应用,集群分布式应用中越来越多的用户开始使用shiro。

java领域中spring security(原名Acegi)也是一个开源的权限管理框架,但是spring security依赖spring运行,而shiro就相对独立,最主要是因为shiro使用简单、灵活,所以现在越来越多的用户选择shiro。

在spring中注入shiro

<!-- 1,配置shiro权限管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!-- 注入缓存管理 -->
        <property name="cacheManager" ref="cacheManager"/>
        <!-- Single realm app.  If you have multiple realms, use the 'realms' property instead. -->
        <!-- 注入设置会话管理模式 -->
        <property name="sessionMode" value="native"/>
        <!-- 注入自定义realm(认证,授权,加密等等数据源) -->
        <property name="realm" ref="shiroRealm"/>
    </bean>
     <!-- 2,配置shiro缓存管理 -->
    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <!-- Set a net.sf.ehcache.CacheManager instance here if you already have one.  If not, a new one
             will be creaed with a default config:
             <property name="cacheManager" ref="ehCacheManager"/> -->
        <!-- If you don't have a pre-built net.sf.ehcache.CacheManager instance to inject, but you want
             a specific Ehcache configuration to be used, specify that here.  If you don't, a default
             will be used.: -->
        <!-- 使用配置文件实现缓存管理 -->
        <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>
    </bean>
    <!-- 3,配置自定义realm受Spring容器管理 -->
    <bean id="shiroRealm" class="com.web.shiro.ShiroRealm">
    	<property name="userDAO" ref="userDAO"></property>
    	<!-- 配置认证时加密 -->
    	<property name="credentialsMatcher">
			<bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
				<!-- 加密模式 -->
				<property name="hashAlgorithmName" value="MD5"></property>
				<!-- 加密次数 -->
				<property name="hashIterations" value="1024"></property>
			</bean>
		</property>
    </bean>
	<bean id="userDAO" class="com.web.dao.UserDAO"></bean>
	 <!-- 4,配置管理shiro生命周期 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
    <!-- 5,配置启用shiro注解功能(注意:配置启动注解功能必须是在配置shiro生命周期之后) -->
    <bean 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>
     <!-- 6,配置shiro过滤器受Spring容器管理(bean的id必须和web.xml中shiro过滤器的filter-name名称保持一致) -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- 注入权限管理器 -->
        <property name="securityManager" ref="securityManager"/>
        <!-- 配置用户登录页面 -->
        <property name="loginUrl" value="/login.jsp"/>
        <!-- 配置认证(登录)成功页面 -->
        <property name="successUrl" value="/index.jsp"/>
        <!-- 配置未授权页面 -->
        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
        <!-- 
        	配置资源文件访问限制 
        	anon	匿名访问
        	authc	认证访问(登录才能访问)
        	logout	注销(退出)
        -->

        <property name="filterChainDefinitions">
            <value>
                /login.jsp = anon
                /user/login = anon
                /index.jsp = authc
                /user/test = authc
                /admin.jsp = authc,roles[admin]
                /user.jsp = authc,roles[user]
                /user/logout = logout
                # everything else requires authentication:
            	/** = authc
            </value>
        </property> 
        <!-- 使用java类配置权限管理 -->
        <!--<property name="filterChainDefinitionMap" ref="filterChainDefinitionMap"></property>-->     
    </bean>
     <!--<bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionMapBuilder"-->
		<!--factory-method="buildfilterChainDefinitionMap"></bean>-->

	<!--<bean id="filterChainDefinitionMapBuilder"-->
		<!--class="com.web.factory.FilterChainDefinitionMapBuilder"></bean>-->
    <!---->
    <!-- 配置未授权异常处理 -->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<!-- 标签主体部分配置未授权显示页面,注意事项:页面路径不需要加.jsp后缀 -->
				<prop key="org.apache.shiro.authz.UnauthorizedException">/unauthorized</prop>
			</props>
		</property>
	</bean>

web.xml配置文件

  <!-- 编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Spring MVC servlet -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- Spring和shiro的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-shiro.xml</param-value>
    </context-param>
    <!-- Spring监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- ==================================================================
         Filters
         ================================================================== -->
    <!-- Shiro Filter is defined in the spring application context: -->
    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <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>
    </filter-mapping>

shiro的依赖jar

 <!-- shiro依赖 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.3.2</version>
        </dependency>

使用java类配置权限管理

class FilterChainDefinitionMapBuilder {
    public LinkedHashMap<String, String> buildfilterChainDefinitionMap(){
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
        map.put("/login.jsp", "anon");
        map.put("/user/login", "anon");
        map.put("/index.jsp", "authc");
        map.put("/user/test", "authc");
        map.put("/admin.jsp", "authc,roles[admin]");
        map.put("/user.jsp", "authc,roles[user]");
        map.put("/user/logout", "logout");
        map.put("/**", "authc");
        return map;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring框架整合shiro 的相关文章

随机推荐

  • rclone 命令大全

    rclone 命令大全 使用google翻译 这描述了每个 rclone 命令 分为两组 非后端和后端标志 可用的全局标志 非后端标志 这些标志可用于每个命令 ask password 允许提示输入加密配置的密码 默认为 true auto
  • 肘部法和轮廓系数法确定K-means中的k值

    目录 1 K Means 算法 2 肘部法 3 轮廓系数法 1 K Means 算法 k means算法 详解k means算法原理 是机器学习中常用的聚类算法 原理简单实现容易 内存占用量也比较小 但使用这个方法时 需要事先指定将要聚合成
  • 【Python递归练习】

    1 出售金鱼问题第一次卖出全部金鱼的一半加二分之一条金鱼 第二次卖出乘余金鱼的三分之一加三分之一条金鱼 第三次卖出剩余金鱼的四分之一加四分之一条金鱼 第四次卖出剩余金鱼的五分之一加五分之一条金鱼 现在还剩下11条金鱼 问这鱼缸里原有多少条金
  • 模块定义qmldir文件

    Module Definition qmldir Files 模块定义qmldir文件 There are two distinct types of qmldir files qmldir文件有两种不同的类型 QML document d
  • ubuntu查看系统资源占用(内存,cpu和进程)

    转载自网易博客 http bluexp29 blog 163 com blog static 33858148201071534450856 bluexp29的博客 linux真是太强大了 查看ubuntu的资源占用的命令为 top top
  • odoo第三方模块审批模块的使用

    1 激活超级用户 因为里面的domain限制了一些字段非超级用户只读 2 依次点击 设置 gt gt 审批流设置 设置审批流 审批流设置完成后 进入所绑定模型的form视图 可以看到多了三个动作
  • python 自(1)定义变量 数据类型 判断数据类型 转换数据类型 算数运算符 复合运算符 比较运算符 逻辑运算符 赋值运算符

    注释 注释 就是一个 也可以 ctrl 也可以出来注释 命名规范 标识符 由字母 下划线 数字 组成 数字不能开头 不可以使用 关键字 严格区分大小写 定义变量 变量定义 重复利用 例如 cons 你好小周 print cons print
  • 【论文阅读-ASE 2020】利用单词重叠信息的代码检索 OCoR: An Overlapping-Aware Code Retriever

    OCoR An Overlapping Aware Code Retriever Conference ASE 2020 Authors 摘要 代码搜索任务是通过给出一段自然语言描述 模型能够找到一系列最相关的代码片段 由此来帮助开发人员重
  • Spring中单例bean注入多例bean的解决方法

    1 问题描述 在项目代码的使用过程 单例对象A中需要注入对象B B对象要求是多例的 我们在对象B上添加注解 Scope prototype 代码运行过程中 发现A中注入的B对象始终是同一个 并没有实现多例的效果 下面展示一些 内联代码片 C
  • 蓝桥云课——跳跃 Python(动态规划)

    题目地址 跳跃 此题是一道比较经典又带有一定难度的动态规划题目 且听我慢慢道来 虽然不一定能讲明白 先输入数据 n m map int input split score for i in range n score append list
  • Activiti6.0学习实践(4)-流程引擎配置一

    在上一节 我们进行了一个hello world 的简单应用搭建 本节继续对activiti的一些重要组件进行更进一步的分析 目录 1 activiti工程骨架 1 2 添加demo类到骨架工程 1 3 创建基于骨架的maven工程 2 流程
  • Leetcode20. 给定字符串,判断括号是否有效,不可用栈

    class Solution public boolean isValid String s int len s length if s length 2 1 s length 0 return false else for int i 0
  • SpringBoot项目——创建菜单与游戏页面

    SpringBoot项目 vue 实现游戏页面 回顾 SpringBoot项目 配置git环境与项目创建 文章目录 SpringBoot项目 vue 实现游戏页面 vue 实现前端页面 Web 一 导航栏功能 PK地图的实现 二 js 控制
  • c3p0连接池和druid连接池的使用

    1 c3p0连接池 没有配置文件的情况下 Test public void T1 throws SQLException PropertyVetoException ComboPooledDataSource cpds new ComboP
  • Keil N01:的软件逻辑分析仪( logic analyzer)使用

    在keil MDK中软件逻辑分析仪很强的功能 可以分析数字信号 模拟化的信号 CPU的总线 UART IIC等一切有输出的管脚 提供调试函数机制 用于产生自定义的信号 如Sin 三角波 澡声信号等 这些都可以定义 以keil里自带的stm3
  • 3.网络爬虫——Requests模块get请求与实战

    Requests模块get请求与实战 requests简介 检查数据 请求数据 保存数据 前言 前两章我们介绍了爬虫和HTML的组成 方便我们后续爬虫学习 今天就教大家怎么去爬取一个网站的源代码 后面学习中就能从源码中找到我们想要的数据 此
  • 中级软件设计师考试(软考中级)考试简介与考试内容分布

    原文链接 中级软件设计师考试 软考中级 考试简介与考试内容分布 文章目录 一 考试简介 1 1 软件设计师考试是什么 1 2 通过软件设计师考试应该具备的技术能力 1 3 软件设计师 中级 资格简介 1 4 什么是评什么是聘 1 5 什么是
  • java 栈----java.util.Stack

    Stack类简介 Stack 类表示后进先出 LIFO 的对象堆栈 它通过五个操作对类 Vector 进行了扩展 Stack类继承自Vector类 允许将向量视为堆栈 它提供了通常的 push 和 pop 操作 以及取堆栈顶点的 peek
  • 软件测试-外国语言和易用性测试

    1 外国语言测试 1 1 使用文字图片有意义 开发软件时 考虑用户的国家和地理位置 使软件适应特定地域特征 照顾到语言 方言 地区习俗和文化的过程称为本地化 测试此类软件称为本地化测试 1 2 翻译问题 文本扩展 将英语翻译成其他语言时 通
  • spring框架整合shiro

    shiro框架 定义 Shiro是apache旗下一个开源框架 它将实现用户身份认证 权限授权 加密 会话管理等功能 组成了一个通用的安全认证框架 既然shiro将安全认证相关的功能抽取出来组成一个框架 使用shiro就可以非常快速的完成认