Shiro配置不拦截请求

Shiro是一个用于身份验证、授权、加密、会话管理等的Java的安全框架,为Java应用程序提供安全认证和授权支持。在实际开发过程中,除了需要进行身份验证和授权认证外,还需要对一些请求进行不拦截处理。本文将从以下几个方面对Shiro配置不拦截的请求做详细的阐述。

一、配置不拦截的请求

Shiro提供了对某些请求不拦截的配置,只需要在shiro.ini或shiro.xml配置文件中进行如下配置即可:

[urls]
/login.jsp = anon
/logout = logout 
/** = authc  

其中:

  • “/login.jsp”:不需要身份验证的请求,即允许匿名访问的请求。
  • “/logout”:登出请求,当用户请求登出时,Shiro将自动清除用户的身份信息以及相关的会话信息。
  • “/**”:所有请求都需要进行身份验证。

在Shiro中,”anon”表示匿名访问,”logout”表示登出请求,”authc”表示身份验证请求。

例如:

[main]
...
[urls]
/logout = logout
/index.jsp = anon
/** = authc

这个配置表示匿名访问”/index.jsp”,清除用户信息请求”/logout”,其他所有请求都需要进行身份验证。

二、自定义拦截器

在Shiro中,如果默认的Filter无法满足我们的需求,我们可以通过自定义Filter进行扩展。

步骤如下:

  1. 定义一个Filter类,继承Shiro中的org.apache.shiro.web.filter.authc.FormAuthenticationFilter类,并重写其中的onPreHandle()方法。
  2. 在shiro.ini或shiro.xml文件中添加Filter定义。
  3. 添加过滤器配置。

例如:

定义一个CustomFormAuthenticationFilter类,代码如下:

public class CustomFormAuthenticationFilter extends FormAuthenticationFilter {
 
    @Override
    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        // 判断是否为登录请求
        if (isLoginSubmission(request, response)) {
            // 处理登录请求
            return executeLogin(request, response);
        } else {
            // 其他请求不进行拦截
            return true;
        }
    }
}

在shiro.ini文件中添加以下内容:

# 添加Filter定义
[filters]
customFilter = org.example.CustomFormAuthenticationFilter

# 添加过滤器配置
[urls]
/login = customFilter
/logout = logout
/** = authc

这个配置表示对”/login”请求使用自定义的CustomFormAuthenticationFilter过滤器,清除用户信息请求”/logout”,其他所有请求都需要进行身份验证。

三、使用注解实现不拦截

在Shiro中,我们还可以使用注解的方式来实现对某些请求的不拦截。

步骤如下:

  1. 在pom.xml文件中引入依赖项。
  2. 在shiro.ini或shiro.xml文件中进行配置。
  3. 在Controller中使用@RequiresPermissions注解标注不拦截的请求。

例如:

在pom.xml文件中添加Shiro-annotations依赖:

<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-annotations</artifactId>
  <version>1.2.5</version>
</dependency>

在shiro.ini文件中添加以下内容:

# 开启注解支持
[main]
shiro.annotations.enabled = true
 
# 添加过滤器配置
[urls]
/logout = logout
/** = authc

在Controller中使用@RequiresPermissions注解标注不拦截的请求:

@Controller
public class UserController {
 
    /**
     * 不需要进行身份验证的请求
     */
    @RequestMapping("/index")
    @RequiresPermissions(value = "index:view", logical = Logical.OR)
    public String index() {
        return "index";
    }
 
    /**
     * 需要进行身份验证的请求
     */
    @RequestMapping("/user/list")
    @RequiresPermissions(value = "user:view", logical = Logical.OR)
    public String userList() {
        return "userList";
    }
}

这个配置表示对”/index”请求不进行身份验证,对”/user/list”请求需要进行身份验证。

四、总结

通过上述的介绍,我们可以了解如何在Shiro中配置不拦截的请求,还可以使用自定义Filter和注解的方式实现对某些请求的不拦截。这些功能的使用可以根据实际的业务需求进行选择,有助于提高开发效率和编写更加安全的Java应用程序。

原创文章,作者:JZMB,如若转载,请注明出处:https://www.506064.com/n/138568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JZMBJZMB
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相关推荐

  • 深度解析Apache Shiro Subject

    一、Shiro Subject的简介 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供身份验证(认证)、授权、加密和会话管理等功能,可以轻松地为Web、移动…

    编程 2025-04-12
  • 深入浅出:shiro注解

    Shiro是一个功能强大的开源Java安全框架,它为我们提供了很多安全特性,如身份认证、授权等。在Shiro中,注解是一种很方便的方式来添加安全特性,其中包括身份认证、授权、加密以…

    编程 2025-04-12
  • Shiro是什么?

    Shiro是一款开源的Java安全框架,可以为任何应用程序提供保护,并为其提供身份验证(authentication)、授权(authorization)、密码学(cryptogr…

    编程 2025-02-24
  • Spring Boot集成Shiro指南

    一、什么是Shiro? Shiro是一个强大、易用的Java安全框架,用于身份验证、授权、密码和会话管理。Shiro的优点是简单直接,能够轻松地集成到任何Java应用程序中。 二、…

    编程 2025-02-11
  • 如何实现Shiro的登出功能

    一、Shiro登出功能的概述 Shiro是一个非常流行的Java安全框架,它提供了很多安全特性,比如身份验证、授权、加密等等。在一个Web应用中,很多时候用户需要登出系统,这时候就…

    编程 2025-02-05
  • Spring Boot集成Shiro实现权限管理

    一、概述 Shiro是一个Java安全框架,提供了身份验证、授权、密码加密和会话管理等功能。可以集成到任何Java应用程序中,包括Web、REST API和大数据架构等。Sprin…

    编程 2024-12-30
  • shiro.ini:引领安全之路

    shiro是一个Java安全框架,广泛用于企业级应用程序开发。它负责身份验证、授权、密码解密、会话管理和加密等方面。shiro被认为是目前最稳健、最全面的Java安全框架之一,sh…

    编程 2024-11-09
  • SimpleAuthenticationInfo 在 Shiro 中的作用和实现

    一、SimpleAuthenticationInfo 简介 SimpleAuthenticationInfo 是 Shiro 框架的核心组件之一,用于封装身份验证信息,实现自定义的…

    编程 2024-11-02
  • 深入浅出 Shiro 权限管理

    Apache Shiro 是一个强大且易于使用的 Java 安全框架,它提供了身份验证、授权、加密等许多常见的安全功能。在今天这个信息化时代,随着互联网业务的快速发展和应用的广泛普…

    编程 2024-10-04

发表回复

登录后才能评论