shiro拦截认证的全过程记录

本文将详细讲解如何使用Shiro进行拦截认证的全过程。针对Shiro拦截认证的过程,主要是包括Shiro拦截器、Shiro过滤器和Shiro Realm三个部分。我们将逐步介绍这三个部分的功能和作用,并且提供两个示例,更好地帮助您理解Shiro的使用。

Shiro拦截器

Shiro拦截器的主要作用是在请求到达目标方法之前,拦截该请求,进行用户身份认证、权限控制等操作。Shiro提供了一系列预定义的拦截器,也可以根据需要自定义拦截器。在Shiro中,拦截器是通过FilterChain进行管理的。

示例一:自定义拦截器

public class CustomAuthInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //通过request、response对象判断用户身份
        if (request.getUserPrincipal() == null) {
            //进行身份验证失败处理
            response.sendRedirect("/login");
            return false;//不再继续执行目标方法
        }
        return true;//继续执行目标方法
    }
}

通过继承HandlerInterceptorAdapter抽象类,我们可以自定义拦截器,并且在preHandle方法中实现对用户身份的认证,如果认证失败则重定向到/login页面。

Shiro过滤器

过滤器是Shiro中拦截器的具体实现,通过对URL、IP地址、用户名等进行过滤,保护应用程序的安全。Shiro提供了一系列预定义的过滤器,也可以根据需要自定义过滤器。在Shiro中,过滤器是通过FilterChainDefinitionMap进行管理的。

示例二:使用Shiro自带过滤器

在Shiro中,有各种各样的过滤器,可以完成不同的任务,如登陆认证、授权、记住我等。下面是一个简单的FilterChainDefinitionMap配置:

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    ...
    <property name="filterChainDefinitionMap">
        <map>
            <entry key="/admin/**" value="authc,roles[admin]"/>
            <entry key="/user/**" value="authc,roles[user]"/>
            <entry key="/login" value="authc"/>
            <entry key="/logout" value="logout"/>
        </map>
    </property>
</bean>

上面示例中,我们对URL进行了分类,设置了不同的访问规则,如访问/admin/下的页面必须是已经通过admin身份认证的用户才能访问。

Shiro Realm

Shiro Realm是负责对用户身份信息进行管理和认证的组件,它从数据源中获取用户信息,并且提供身份认证、授权、加密等功能。在Shiro中,Realm是一个接口,需要进行自定义。

示例三:自定义Realm

public class MyRealm extends AuthorizingRealm {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        //获取当前用户信息,如用户角色、权限等
        String username = (String) principals.fromRealm(getName()).iterator().next();
        User user = userService.getUserByName(username);
        SimpleAuthorizationInfo authInfo = new SimpleAuthorizationInfo();
        for (Role role : user.getRoles()) {
            authInfo.addRole(role.getName());
            for (Permission perm : role.getPermissions()) {
                authInfo.addStringPermission(perm.getName());
            }
        }
        return authInfo;
    }

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        UsernamePasswordToken userToken = (UsernamePasswordToken) token;
        User user = userService.getUserByName(userToken.getUsername());
        if(user == null) {
            throw new UnknownAccountException("无此用户");
        }
        return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
    }
}

通过实现AuthorizingRealm抽象类,我们可以自定义Realm,并且在doGetAuthorizationInfo方法中获取当前用户的角色和权限信息,在doGetAuthenticationInfo方法中对用户身份信息进行认证。

上述内容就是Shiro拦截认证的全过程记录的完整攻略了,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:shiro拦截认证的全过程记录 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Python遍历目录并批量更换文件名和目录名的方法

    Python遍历目录并批量更换文件名和目录名的方法 在Python中,使用os模块可以方便地访问文件系统。通过os模块提供的函数和方法,可以遍历目录和文件,实现批量更换文件名和目录名的操作。 1. 遍历目录 使用os.walk()函数可以遍历一个目录及其子目录中的所有文件和目录,返回的是一个由(dirpath, dirnames, filenames)组成的…

    other 2023年6月26日
    00
  • 魔兽世界8.0鸟德天赋特质推荐及输出手法介绍

    魔兽世界8.0鸟德天赋特质推荐及输出手法介绍攻略 介绍 鸟德,即“风暴之鸟德鲁伊”,是魔兽世界中的一个近战输出职业。在8.0版本中鸟德的天赋及特质有了非常大的调整,本攻略将介绍鸟德在8.0版本中的天赋特质,并提供一些输出手法,帮助玩家更好的使用鸟德角色。 基础技能 在阅读本攻略之前,需要了解鸟德的基础技能。常用的基础技能如下: 近战技能:爪击、旋风斩 远程技…

    other 2023年6月27日
    00
  • Win11右键上下文菜单存在BUG 微软将着手进行修复

    Win11右键上下文菜单存在BUG 最近Win11的用户反映了一个问题,就是在某些情况下右键菜单会出现异常,如菜单项重复、图标错误等。经过微软的证实,这确实是Win11系统的一个BUG。 修复方法 目前微软正在积极开展修复工作,预计最新的更新会在近日内发布。用户可以及时更新系统补丁来解决这个问题。 另外,为了避免这个问题再次出现,用户也可以尝试以下的一些方法…

    other 2023年6月27日
    00
  • IIS下配置页面重写(配合插件url-rewrite2去除页面后缀名)的实现方法

    IIS下配置页面重写(配合插件url-rewrite2去除页面后缀名)的实现方法 在IIS(Internet Information Services)中配置页面重写,可以使用插件url-rewrite2来去除页面的后缀名。下面是详细的攻略,包含了两个示例说明。 步骤一:安装url-rewrite2插件 下载url-rewrite2插件并安装到IIS服务器上…

    other 2023年8月6日
    00
  • 电脑提示内存不足的解决方法总汇

    电脑提示内存不足的解决方法总汇 1. 了解内存不足的原因 当电脑提示内存不足时,通常是因为系统运行的程序和任务所需的内存超过了可用的物理内存。这可能导致电脑运行缓慢或出现崩溃的情况。解决内存不足问题的方法可以分为以下几个方面。 2. 关闭不必要的程序和任务 首先,我们可以通过关闭不必要的程序和任务来释放内存。在任务栏中右键单击不需要的程序图标,选择关闭或退出…

    other 2023年8月1日
    00
  • 怎么解压文件

    当我们从网络或其他地方下载了一个压缩文件时,需要解压文件才能使用其中的内容。下面是解压文件的完整攻略。 1. 下载压缩文件 首先,需要下载压缩文件到本地计算机。可以从网站、FTP服务器和其他渠道下载。 2. 确认压缩文件格式 要正确地解压缩文件,需要知道它的格式。目前常见的压缩文件格式有.zip、.rar、.tar、.gz等,还有一些特殊的格式。根据文件的扩…

    其他 2023年4月16日
    00
  • 基于C语言字符串函数的一些使用心得

    基于C语言字符串函数的一些使用心得 字符串和字符数组的区别 在C语言中,字符串常常被称为字符数组,因为字符串本身就是由字符组成的数组。一个字符串是一个以空字符(‘\0’)结尾的字符数组。而字符数组则没有这样的限制。 下面是一个字符串和一个字符数组的例子: char str[] = "Hello World!"; // 字符串 char a…

    other 2023年6月20日
    00
  • 将数据导入hive,将数据从hive导出

    将数据导入hive,将数据从hive导出 Apache Hadoop和Apache Hive是两种流行的大数据处理工具。Hadoop是一个开放源代码的分布式存储和处理大型数据集的框架,而Hive是用于适合SQL查询和数据分析的数据仓库解决方案。 本文将介绍如何将数据导入Hive,并从Hive导出数据。 将数据导入Hive 在将数据导入Hive之前,需要确保数…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部