新接一个项目,着急使用权限功能,就先没写Realm扩展类直接使用JdbcRealm了。已经建好了5个表:用户,角色,权限,和两个中间表,重写了JdbcRealm的三个Query属性:authenticationQuery,userRolesQuery,permissionsQuery。配置时还要把permissionsLookupEnabled属性设置为true,否则permissionsQuery不能执行,将会查不到权限表里的数据。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="jdbcRealm"/>
</bean>
<bean id="jdbcRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
<property name="dataSource" ref="dataSource"/>
<property name="permissionsLookupEnabled" value="true"/>
<property name="authenticationQuery" value="select password from rms_user where login_name = ?" />
<property name="userRolesQuery" value="select r.role_code from rms_role r,rms_user u,rms_user_role ur where r.id = ur.role_id and u.id = ur.user_id and u.login_name = ?"/>
<property name="permissionsQuery" value="select distinct p.priv_code from rms_privilege p,rms_role r,rms_role_privilege rp where p.id = rp.priv_id and r.id = rp.role_id and r.role_code = ?"/>
</bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login"/>
<property name="successUrl" value="/main"/>
<property name="unauthorizedUrl" value="/login"/>
<property name="filterChainDefinitions">
<value>
/login = authc
/logout = logout
/static/** = anon
/** = authc
</value>
</property>
</bean>
</beans>
进入页面后,权限表中priv_code有"user:view"数据,所对应的角色和用户,就能看见Shiro标签里的内容。
<shiro:user>
<shiro:hasPermission name="user:view">
<div>用户管理</div>
</shiro:hasPermission>
</shiro:user>
分享到:
相关推荐
本测试小例子是基于Shiro内置的JdbcRealm实现,JdbcRealm是Shiro与数据库交互的一个关键组件,用于存储用户身份和权限信息。 首先,我们需要理解Shiro的 Realm 概念。Realm是Shiro的核心组件,它充当了Shiro与应用...
shiro demo 源码里面2中realm 一种是jdbcRealm 一种是自定义realm 有sql脚本。请看db文件夹下的readme.txt 有关这个项目的详细介绍,使用了简单的标签库权限控制当做例子
在本示例中,我们将深入探讨如何利用Shiro的JdbcRealm组件与数据库进行交互,实现用户身份的查询和认证。 JdbcRealm是Shiro提供的一个内置Realm,它允许我们通过SQL查询从关系型数据库中获取用户信息,完成身份验证...
本文将深入探讨如何使用Apache Shiro管理用户权限,并与数据库进行交互,以便实现动态、灵活的安全策略。 ### 一、理解Apache Shiro的权限管理 Apache Shiro的权限管理基于角色和权限的概念。角色是一组权限的集合...
在本例中,我们将使用 Apache Shiro 实现基础的权限管理,通过使用 IniShiroFilter 过滤器和 JDBCRealm 来管理用户权限和数据库交互。 IniShiroFilter 过滤器 IniShiroFilter 是 Apache Shiro 提供的一个核心组件...
以下是一个简单的 `shiro.ini` 示例: ```ini [users] admin = 123456, admin_role user = 654321, user_role [roles] admin_role = * user_role = read, write ``` 在这个例子中,`admin` 用户拥有所有权限(由 ...
Shiro的设计目标是为应用提供简单、直观和易于使用的安全API,从而让开发人员能迅速将安全特性集成到应用中。 Shiro框架的核心概念包括以下几个方面: 1. 权限管理系统分为两个基本部分:权限分配和权限验证。权限...
本实例将通过自定义Realm来演示如何使用Shiro从数据库中查询数据进行用户验证。 首先,我们需要了解 Realm 的基本概念。在Shiro中, Realm 是一个接口,它实现了认证和授权的功能。默认的 Realm 类型包括 JdbcRealm...
Shiro框架是一个开源的安全框架,在Web开发应用中使用比较多验证和权限管理。它提供了一个灵活的身份验证和授权机制,可以使得开发难度大大降低。下面是Shiro框架使用简易教程的知识点总结: 一、通过配置文件配置...
Shiro默认提供了多种Realms实现,如JdbcRealm,也支持自定义Realms以满足特定需求。在Spring环境中配置Realms使得与现有应用程序集成更为简便。 ### Shiro的Session管理 Shiro提供了全面的Session管理功能,可以...
在默认情况下,Shiro提供了一些预定义的Realm实现,如JDBCRealm、AuthorizingRealm等,但这些可能无法满足所有应用场景,因此我们需要自定义Realm来适配特定的数据存储结构和验证逻辑。 1. ** Realm的基本结构**:...
在默认情况下,Shiro提供了一些预定义的Realm实现,如JDBCRealm、AuthorizingRealm等,但它们可能无法满足所有应用程序的需求,因此我们经常需要创建自定义Realm。 首先,创建自定义Realm需要继承Shiro的`...
这些标签可以在 JSP 页面中使用,帮助开发者实现复杂的权限控制。 - **引入 shiro-web.jar**:确保在项目的 classpath 中包含了 shiro-web.jar 文件。 - **定义 TLD 文件**:在 WEB-INF 目录下创建 TLD 文件,如 `...
在“shiro 的JdbcRealm一个测试例子”中,我们将探讨如何利用Shiro的JdbcRealm实现用户身份验证与授权,结合数据库进行权限管理。 JdbcRealm是Shiro内置的一个 Realm 类,它允许我们通过 JDBC 驱动连接数据库,进行...
6. **权限控制**:在需要限制访问的Controller方法上使用Shiro注解,如`@RequiresPermissions`或`@RequiresRoles`,以实现权限控制。 7. **会话管理**:Shiro提供了一套完整的会话管理机制,可以通过监听器或者拦截...
Shiro内置了多种Realm实现,如JndiLdapRealm(用于LDAP)、JdbcRealm(用于JDBC)、IniRealm(用于INI配置文件)和PropertiesRealm(用于属性文件),同时也支持自定义Realm以适配各种数据源。 总结一下,Shiro的...