`

shiro

阅读更多

 

 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(shiro1.3.2)

    Apache Shiro是一个强大且易用的Java安全框架,主要用于处理认证、授权、加密以及会话管理等核心安全性问题。在给定的压缩包"shiro1.3.2"中,包含了Shiro的一个核心组件库"shiro-all-1.3.2.jar"以及两个日志管理库...

    shiro1.7.1.zip

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供了便利。标题"shiro1.7.1.zip"表明这是Apache Shiro的一个版本更新,从1.3.2升级到1.7.1。...

    Apache_Shiro_使用手册(一)Shiro架构介绍

    ### Apache Shiro 使用手册(一)Shiro架构介绍 #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较...

    shiro所有版本jar

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地用于构建和强化应用程序的安全性。Shiro的核心目标是为开发者提供一个简单易用的安全API,使得开发者能够快速...

    shiro源码(shiro-root-1.8.0-source-release.zip)

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用程序。它既适用于传统的Web应用,也适用于现代的Java EE和Android应用。现在我们来深入...

    shiro_tool.zip

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。在"shiro_tool.zip"这个压缩包中,我们可以推测可能包含了一些关于Shiro使用的工具类、...

    shiro所有jar包

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,使得在Java应用中处理安全性变得更加简单。Shiro不仅适合大型企业级应用,也适用于小型项目,因为它的API设计直观易用。当...

    shiro 反序列化漏洞综合利用工具 shiro_attack_by J1anfen

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密以及会话管理功能,简化了应用安全的实现。在提到的 "shiro_attack_by J1anfen" 工具中,重点是针对 Apache Shiro 的一个特定安全问题:...

    shiro项目基本运行架包以及全部的架包shiro-all.jar

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供了一种简单易用的方式。标题提到的"shiro项目基本运行架包以及全部的架包shiro-all.jar"正是...

    shiro权限案例demo

    Apache Shiro是一个强大且易用的Java安全框架,主要用于身份认证、授权(权限控制)、会话管理和加密等安全相关的功能。在这个"shiro权限案例demo"中,我们将深入探讨Shiro如何实现用户权限的管理。 首先,让我们...

    Apache shiro 1.13.0源码

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...

    shiro最简单整合版本

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了处理安全性的工作。在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心...

    shiro.freemarker.ShiroTags已打包

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员在应用程序中处理安全问题的复杂性。ShiroTags 是 Shiro 提供的一套用于模板引擎的标签库,如 Freemarker ...

    shiro-all jar

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。"shiro-all jar"是Shiro的核心库,包含了所有Shiro的功能模块,方便开发者在一个JAR包中直接引用,避免了管理多个...

    java shiro实现退出登陆清空缓存

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份验证、授权、会话管理和加密服务。在 Java Web 应用中,Shiro 可以帮助开发者轻松地处理用户登录、登出以及权限控制等问题。在本文中,我们将讨论如何利用 ...

    Shiro根据用户权限显示不同的菜单.Shiro根据权限显示指定菜单

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供便利。在这个场景中,我们关注的是如何利用Shiro实现根据用户权限动态显示不同的菜单。 ...

    ssm集成redis和shiro

    SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,而Redis是内存数据库,常用于缓存和会话管理,Shiro则是一个强大的安全框架,负责认证、授权、会话管理和安全控制。下面我们将深入探讨如何在...

    Shiro反序列化漏洞,Shiro版本升级资源

    shiro使用的版本是1.2.4,存在反序列化漏洞,我们采取的办法是手动升级到了1.2.6版本,但苦于无法验证是否解决了问题,后来发现了一款测试工具,ShiroExploit。 测试工具下载地址 ... 反序列化漏洞是如何产生的?...

    shiro jar包及源码下载

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。Shiro适用于各种应用,从小型独立应用到大型分布式系统,都能有效地支持。 在"shiro-...

Global site tag (gtag.js) - Google Analytics