shiro是一个特别简单,易用的框架,在此记录一下shiro的使用配置。
首先,创建四张表:user role user_role permission,分别为用户、角色、用户与角色关系表和权限表。
user表结构:
role表结构:
user_role
permission
当然,表结构如何设计是没有关系的,你可以根据自己偏好设计。
web.xml中加入shiro的过滤器:
<filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
然后配置shiro,可以写在spring的配置文件中,也可以另起一个配置文件,配置内容如下:
<!-- 配置权限管理器 --> <bean id="myShiro" class="com.itmayong.util.MyShrio"></bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <!-- 我们自定义的realm --> <property name="realm" ref="myShiro"/> <!-- 缓存管理器 --> <property name="cacheManager" ref="cacheManager"/> </bean> <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="/main.jsp"/> <!-- 错误页面 --> <property name="unauthorizedUrl" value="/error.jsp"/> <!-- 权限配置 --> <property name="filterChainDefinitions"> <value> <!-- anon无权限访问请求,此处是登录页面和登录请求 --> /login.do = anon /static/**=anon <!-- 需要权限为add的用户才能访问此请求--> /user=perms[user:add] <!-- 需要管理员角色才能访问此页面 --> /user/add=roles[admin] <!--拦截非静态资源的所有请求--> /** = authc </value> </property> </bean> <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" /> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
上面的配置文件我们指定了自定义的realm,内容如下:
public class MyShrio extends AuthorizingRealm{ @Autowired private UserServiceIf userService; /** * 权限认证,获取登录用户的权限 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { String loginName=(String) principalCollection.fromRealm(getName()).iterator().next(); //此处连库匹配了登录用户的数据,具体怎么做,需要根据个人需求而定 User user=userService.findByName(loginName); List<Role> list = user.getRoleList(); if(user!=null){ SimpleAuthorizationInfo info=new SimpleAuthorizationInfo(); //获取用户的角色名称 info.setRoles(user.getRolesName()); //获取用户的权限 List<Role> roleList=user.getRoleList(); for (Role role : roleList) { info.addStringPermissions(role.getPermissionsName()); } return info; } return null; } /** * 登录认证,创建用户的登录信息 */ @Override protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authenticationToken) throws AuthenticationException { UsernamePasswordToken token=(UsernamePasswordToken) authenticationToken; //判断用户登录状态 User user=userService.findByName(token.getUsername()); if(user!=null){ //保存用户登录信息到认证中 return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName()); } return null; } }
最后,你可以写一个页面和Controller进行测试了,当然也可以细分一下权限和角色,以应用到实际更复杂的场景中。
页面内容可以使用下边的方式对需要角色和权限控制的内容进行包裹,以达到权限控制的目的。
<shiro:hasRole name="admin">需要管理员角色</shiro:hasRole> <shiro:hasPermission name="add">需要add权限</shiro:hasPermission>
相关推荐
shiro使用的版本是1.2.4,存在反序列化漏洞,我们采取的办法是手动升级到了1.2.6版本,但苦于无法验证是否解决了问题,后来发现了一款测试工具,ShiroExploit。 测试工具下载地址 ... 反序列化漏洞是如何产生的?...
赠送jar包:shiro-core-1.4.0.jar; 赠送原API文档:shiro-core-1.4.0-javadoc.jar; 赠送源代码:shiro-core-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-core-1.4.0.pom; 包含翻译后的API文档:shiro-core...
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
# sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库...
SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
shiro+redis作为认证授权服务 oaa,提供为网关feign接口,用来验证权限 。 方案二: zuul作为网关,具备熔断,负载,统一操作日志。整合shiro+redis为网关进行认证权限拦截,过滤器统一异常捕获 ; 两种网关底层实现...
shiro(shiro-all-1.8.0.jar)
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大. Shiro 可以非常容易的开发出足够好的应用,其不仅...
shiro shiro-core-1.7.1 jar shiro漏洞
尚硅谷_Shiro_源码、课件 · 01.尚硅谷_Shiro_简介 · 02.尚硅谷_Shiro_HelloWorld · 03.尚硅谷_Shiro_集成 Spring · 04.尚硅谷_Shiro_工作流程(1) · 05.尚硅谷_Shiro_DelegatingFilterProxy · 06. 尚硅谷...
Shiro是Apache从JSecret项目演变而来的,该框架实现了:用户登录、认证、授权和权限管理操作的完整控制流程。Shiro最早的名字是JSecurity,后来更名为Shiro并成为Apache的孵化项目。这次改名也同样影响了Grails ...
Apache Shiro是一个功能强大且易于使用的Java安全框架,可执行身份验证、授权、加密和会话管理。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能...
赠送jar包:shiro-spring-1.4.0.jar; 赠送原API文档:shiro-spring-1.4.0-javadoc.jar; 赠送源代码:shiro-spring-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-spring-1.4.0.pom; 包含翻译后的API文档:...
Apache Shiro 是目前使用率较高的一个 Java 安全框架。本视频基于 Shiro 的新版本 1.3.2 录制。内容涵盖 Shiro 认证、加密、授权、安全标签、安全注解、会话管理、缓存、Rememberme 等 JavaEE 企业级开发的核心技术...
Apache_Shiro_使用手册(一)Shiro架构介绍
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。 Realm: Realm充当了Shiro与应用安全数据间的"桥梁"或者"连接器"。也...
shiro最简单整合版本shiro最简单整合版本shiro最简单整合版本shiro最简单整合版本shiro最简单整合版本
赠送jar包:shiro-event-1.4.0.jar; 赠送原API文档:shiro-event-1.4.0-javadoc.jar; 赠送源代码:shiro-event-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-event-1.4.0.pom; 包含翻译后的API文档:shiro-...
shiro所有的jar包 还有跟cas集成的jar包 以及shiro官网的jar下载地址