springboot整合shiro (二) 使用shiro过滤器实现认证资源拦截

简介: springboot整合shiro (二) 使用shiro过滤器实现认证资源拦截

我们去写几个页面来实现登录拦截

核心代码:

// 添加 Shiro 内置过滤器
        /**
         * Shiro 内置过滤器, 可以实现权限相关的拦截器
         * 常用的过滤器:
         *      anon: 无需认证(登录)即可访问
         *      authc: 必须认证才可访问
         *      user: 如果使用 rememberMe
         *      perms: 该资源必须得到资源权限才能访问
         *      role: 该资源必须得到角色权限才可访问
         */
        Map<String, String> filterMap = new LinkedHashMap<>();
        filterMap.put("/index", "anon");
        filterMap.put("/login", "anon");
        filterMap.put("/*", "authc");
        filterFactoryBean.setFilterChainDefinitionMap(filterMap);
        // 修改调整的登陆页面
        filterFactoryBean.setLoginUrl("/toLogin");

1. 登录和测试页面的撰写

首先引入 thymeleaf 依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

然后我们写几个页面

index中就是有两个链接可以跳转到add和update页面, 而login则是实现登录

controller中添加跳转

package com.krlin.springbootshiro.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ShiroController {
    @RequestMapping("/index")
    public String index() {
        return "index";
    }
    @RequestMapping("/login")
    public String login() {
        return "login";
    }
    @RequestMapping("/add")
    public String add() {
        return "user/add";
    }
    @RequestMapping("/update")
    public String update() {
        return "user/update";
    }
    @RequestMapping("/toLogin")
    public String toLogin() {
        return "/login";
    }
}

现在点击跳转是可以跳转到添加或者更新页面的, 这时候我们需要加权限,当点击添加的时候判断是否登录, 如果登录了就可以跳转,否则跳转到登陆页面

2. shiro实现登录拦截

我们在 ShiroConfig中做修改

/**
     * 创建 ShiroFilterFactoryBean
     */
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean (@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
        ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
        // 设置安全管理器
        filterFactoryBean.setSecurityManager(securityManager);
        // 添加 Shiro 内置过滤器
        /**
         * Shiro 内置过滤器, 可以实现权限相关的拦截器
         * 常用的过滤器:
         *      anon: 无需认证(登录)即可访问
         *      authc: 必须认证才可访问
         *      user: 如果使用 rememberMe
         *      perms: 该资源必须得到资源权限才能访问
         *      role: 该资源必须得到角色权限才可访问
         */
        Map<String, String> filterMap = new LinkedHashMap<>();
        filterMap.put("/add", "authc");
        filterMap.put("/update", "authc");
        filterFactoryBean.setFilterChainDefinitionMap(filterMap);
        return filterFactoryBean;
    }

我们给 /add和/update 加上authc权限, 再次访问‘

可以看到,再次点击添加用户就会跳转到 login.jsp 但是因为login.jsp不存在, 所以是404

我们可以修改他跳转到指定页面,

// 修改调整的登陆页面
filterFactoryBean.setLoginUrl("/toLogin");

这个时候我们点击添加或者更新就会跳转到登陆页面

一般我们对一个网站做拦截处理的时候是对所有路径拦截,然后去放行某些登录注册等路径, 操作如下

我们去拦截所有的请求, 但是放行 /index 这个请求

相关文章
|
2月前
|
安全 Java 数据库
安全无忧!在 Spring Boot 3.3 中轻松实现 TOTP 双因素认证
【10月更文挑战第8天】在现代应用程序开发中,安全性是一个不可忽视的重要环节。随着技术的发展,双因素认证(2FA)已经成为增强应用安全性的重要手段之一。本文将详细介绍如何在 Spring Boot 3.3 中实现基于时间的一次性密码(TOTP)双因素认证,让你的应用安全无忧。
116 5
|
19天前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
46 8
|
2月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
47 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
2月前
|
安全 Java 关系型数据库
springboot整合springsecurity,从数据库中认证
本文介绍了如何在SpringBoot应用中整合Spring Security,并从数据库中进行用户认证的完整步骤,包括依赖配置、数据库表创建、用户实体和仓库接口、用户详情服务类、安全配置类、控制器类以及数据库初始化器的实现。
162 3
springboot整合springsecurity,从数据库中认证
|
2月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
32 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
36 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
1月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
39 0
|
4月前
|
安全 Java 数据库
Spring Boot中集成 Shiro
本节主要介绍了 Shiro 安全框架与 Spring Boot 的整合。先介绍了 Shiro 的三大核心组件已经它们的作用;然后介绍了 Shiro 的身份认证、角色认证和权限认证;最后结合代码,详细介绍了 Spring Boot 中是如何整合 Shiro 的,并设计了一套测试流程,逐步分析 Shiro 的工作流程和原理,让读者更直观地体会出 Shiro 的整套工作流程。Shiro 使用的很广泛,希望读者将其掌握,并能运用到实际项目中。
|
Java Spring
spring boot 集成websocket与shiro的坑
spring boot 集成websocket与shiro的坑
405 0
|
7月前
|
前端开发 Java Spring
使用Spring Boot集成Shiro时出现了无法注入Service的问题
使用Spring Boot集成Shiro时出现了无法注入Service的问题
113 0