shiro拦截认证的全过程记录

yizhihongxing

本文将详细讲解如何使用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日

相关文章

  • ios字典nsdictionary与nsmutabledictionary知识点

    以下是iOS字典NSDictionary与NSMutableDictionary知识点的完整攻略,包括以下内容: 概述 NSDictionary的基本用法 NSMutableDictionary的基本用法 示例说明 1. 概述 在iOS开发中,字典是一种常见的数据结构,用于存储键值对。NSDictionary和NSMutableDictionary是iOS中…

    other 2023年5月9日
    00
  • 利用火绒关闭Chrome请停用以开发者模式运行的扩展程序的图文教程

    以下是详细讲解“利用火绒关闭Chrome请停用以开发者模式运行的扩展程序的图文教程”的完整攻略。 准备工作 首先,需要确保已经安装最新版的火绒安全软件,并且已经成功安装并启用了Chrome浏览器。 步骤一:进入扩展程序管理页面 在Chrome浏览器的地址栏中输入chrome://extensions/,并回车,进入到扩展程序管理页面。 步骤二:查看已安装扩展…

    other 2023年6月26日
    00
  • 如何重置CentOS 7的Root密码?设置CentOS 7的Root密码的方法与步骤

    下面是详细的攻略: 如何重置CentOS 7的Root密码? 当您忘记了 CentOS 7 的 Root 密码时,您可以采取一些措施进行重置。下面是重置 CentOS 7 Root 密码的方法和步骤。 方法一:通过忘记密码流程重置 在登录页面点击“忘记密码”链接 如果您的 CentOS 7 系统上有“忘记密码”选项,则您可以轻松找回密码。单击登录页面上的“忘…

    other 2023年6月27日
    00
  • 电脑小技巧分享:右键菜单功能使用技巧

    电脑小技巧分享:右键菜单功能使用技巧 作为操作电脑的日常必备技能,使用右键菜单功能无疑可以大大提高我们的工作效率。下面将为大家分享一些右键菜单的使用技巧,提升我们操作电脑的便捷程度。 1. 自定义右键菜单 我们可以通过编辑注册表来自定义右键菜单。首先打开注册表,找到”HKEY_CLASSES_ROOT”键下与文件扩展名相关的键,点击右键,选择“新建-项”,将…

    other 2023年6月27日
    00
  • 岳麓山风景名胜区-景点介绍

    岳麓山风景名胜区-景点介绍攻略 岳麓山风景名胜区位于湖南省长沙市岳麓区,是中国著名的风景区之一。本文将详细介绍岳麓山风景名胜区的景点介绍,包含两个示例说明。 1. 景点介绍 1.1. 橘子洲头 橘子洲头位于岳麓山风景名胜区的湖岸边,是长沙市的标志性景点之一。这里有美丽的湖景和独特的文化氛围,游客拍照和休闲的好去处。 1.2. 岳麓书院 岳麓书院是中国历史上著…

    other 2023年5月9日
    00
  • SVG 入门——理解viewport,viewbox,preserveAspectRatio

    SVG 入门——理解viewport,viewbox,preserveAspectRatio 什么是SVG? SVG(Scalable Vector Graphics:可缩放矢量图形)是一种用于描述二维矢量图形的XML标准,它可以在任何分辨率下被高保真地显示,也可以被无限放大而不失真,因此非常适合用于图标、图像和动画等场景。 SVG 的基本概念 当我们开始使…

    其他 2023年3月28日
    00
  • dotnet封装的kindeditor编辑器控件

    下面是关于“dotnet封装的kindeditor编辑器控件”的完整攻略: 1. 安装kindeditor编辑器控件 首先需要在项目中安装kindeditor编辑器控件。在NuGet包管理器中安装kindeditor.autocomplete。 2. 添加kindeditor的css和js文件 在标记中添加kindeditor的样式和js文件: <he…

    other 2023年6月27日
    00
  • awvs破解安装

    AWVS破解安装 AWVS(Acunetix Web Vulnerability Scanner)是一款功能强大的Web漏洞扫描器。AWVS可以快速扫描并发现Web应用程序的各种漏洞,从而帮助网站管理员及时消除安全威胁。 然而,AWVS是一款商业软件,如果要正式使用,需要付费购买授权。不过,在网络上有很多破解版的AWVS,可以通过简单的操作来破解安装。本文将…

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