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/zh-tw/n/138568.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JZMB的頭像JZMB
上一篇 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

發表回復

登錄後才能評論